home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / wininet.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  96.6 KB  |  3,063 lines

  1. /*++
  2.  
  3. Copyright (c) 1995-1997  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     wininet.h
  8.  
  9. Abstract:
  10.  
  11.     Contains manifests, macros, types and prototypes for Microsoft Windows
  12.     Internet Extensions
  13.  
  14. --*/
  15.  
  16. #ifndef _WININET_
  17. #define _WININET_
  18. #pragma option push -b
  19.  
  20.  
  21. /*
  22.  * Set up Structure Packing to be 4 bytes
  23.  * for all wininet structures
  24.  */
  25.  
  26. #pragma pack(push, 4)
  27.  
  28.  
  29.  
  30. #if defined(__cplusplus)
  31. extern "C" {
  32. #endif
  33.  
  34.  
  35. #if !defined(_WINX32_)
  36. #define INTERNETAPI DECLSPEC_IMPORT
  37. #define URLCACHEAPI DECLSPEC_IMPORT
  38. #else
  39. #define INTERNETAPI
  40. #define URLCACHEAPI
  41. #endif
  42.  
  43. #define BOOLAPI INTERNETAPI BOOL WINAPI
  44.  
  45. //
  46. // internet types
  47. //
  48.  
  49. typedef LPVOID HINTERNET;
  50. typedef HINTERNET * LPHINTERNET;
  51.  
  52. typedef WORD INTERNET_PORT;
  53. typedef INTERNET_PORT * LPINTERNET_PORT;
  54.  
  55. //
  56. // Internet APIs
  57. //
  58.  
  59. //
  60. // manifests
  61. //
  62.  
  63. #define INTERNET_INVALID_PORT_NUMBER    0           // use the protocol-specific default
  64.  
  65. #define INTERNET_DEFAULT_FTP_PORT       21          // default for FTP servers
  66. #define INTERNET_DEFAULT_GOPHER_PORT    70          //    "     "  gopher "
  67. #define INTERNET_DEFAULT_HTTP_PORT      80          //    "     "  HTTP   "
  68. #define INTERNET_DEFAULT_HTTPS_PORT     443         //    "     "  HTTPS  "
  69. #define INTERNET_DEFAULT_SOCKS_PORT     1080        // default for SOCKS firewall servers.
  70.  
  71.  
  72. //
  73. // maximum field lengths (arbitrary)
  74. //
  75.  
  76. #define INTERNET_MAX_HOST_NAME_LENGTH   256
  77. #define INTERNET_MAX_USER_NAME_LENGTH   128
  78. #define INTERNET_MAX_PASSWORD_LENGTH    128
  79. #define INTERNET_MAX_PORT_NUMBER_LENGTH 5           // INTERNET_PORT is unsigned short
  80. #define INTERNET_MAX_PORT_NUMBER_VALUE  65535       // maximum unsigned short value
  81. #define INTERNET_MAX_PATH_LENGTH        2048
  82. #define INTERNET_MAX_SCHEME_LENGTH      32          // longest protocol name length
  83. #define INTERNET_MAX_URL_LENGTH         (INTERNET_MAX_SCHEME_LENGTH \
  84.                                         + sizeof("://") \
  85.                                         + INTERNET_MAX_PATH_LENGTH)
  86.  
  87. //
  88. // values returned by InternetQueryOption() with INTERNET_OPTION_KEEP_CONNECTION:
  89. //
  90.  
  91. #define INTERNET_KEEP_ALIVE_UNKNOWN     ((DWORD)-1)
  92. #define INTERNET_KEEP_ALIVE_ENABLED     1
  93. #define INTERNET_KEEP_ALIVE_DISABLED    0
  94.  
  95. //
  96. // flags returned by InternetQueryOption() with INTERNET_OPTION_REQUEST_FLAGS
  97. //
  98.  
  99. #define INTERNET_REQFLAG_FROM_CACHE     0x00000001  // response came from cache
  100. #define INTERNET_REQFLAG_ASYNC          0x00000002  // request was made asynchronously
  101. #define INTERNET_REQFLAG_VIA_PROXY      0x00000004  // request was made via a proxy
  102. #define INTERNET_REQFLAG_NO_HEADERS     0x00000008  // orginal response contained no headers
  103. #define INTERNET_REQFLAG_PASSIVE        0x00000010  // FTP: passive-mode connection
  104. #define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x00000040  // HTTPS: this request not cacheable
  105.  
  106. //
  107. // flags common to open functions (not InternetOpen()):
  108. //
  109.  
  110. #define INTERNET_FLAG_RELOAD            0x80000000  // retrieve the original item
  111.  
  112. //
  113. // flags for InternetOpenUrl():
  114. //
  115.  
  116. #define INTERNET_FLAG_RAW_DATA          0x40000000  // FTP/gopher find: receive the item as raw (structured) data
  117. #define INTERNET_FLAG_EXISTING_CONNECT  0x20000000  // FTP: use existing InternetConnect handle for server if possible
  118.  
  119. //
  120. // flags for InternetOpen():
  121. //
  122.  
  123. #define INTERNET_FLAG_ASYNC             0x10000000  // this request is asynchronous (where supported)
  124.  
  125. //
  126. // protocol-specific flags:
  127. //
  128.  
  129. #define INTERNET_FLAG_PASSIVE           0x08000000  // used for FTP connections
  130.  
  131. //
  132. // additional cache flags
  133. //
  134.  
  135. #define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000  // don't write this item to the cache
  136. #define INTERNET_FLAG_DONT_CACHE        INTERNET_FLAG_NO_CACHE_WRITE
  137. #define INTERNET_FLAG_MAKE_PERSISTENT   0x02000000  // make this item persistent in cache
  138. #define INTERNET_FLAG_FROM_CACHE        0x01000000  // use offline semantics
  139. #define INTERNET_FLAG_OFFLINE           INTERNET_FLAG_FROM_CACHE
  140.  
  141. //
  142. // additional flags
  143. //
  144.  
  145. #define INTERNET_FLAG_SECURE            0x00800000  // use PCT/SSL if applicable (HTTP)
  146. #define INTERNET_FLAG_KEEP_CONNECTION   0x00400000  // use keep-alive semantics
  147. #define INTERNET_FLAG_NO_AUTO_REDIRECT  0x00200000  // don't handle redirections automatically
  148. #define INTERNET_FLAG_READ_PREFETCH     0x00100000  // do background read prefetch
  149. #define INTERNET_FLAG_NO_COOKIES        0x00080000  // no automatic cookie handling
  150. #define INTERNET_FLAG_NO_AUTH           0x00040000  // no automatic authentication handling
  151. #define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000  // return cache file if net request fails
  152.  
  153. //
  154. // Security Ignore Flags, Allow HttpOpenRequest to overide
  155. //  Secure Channel (SSL/PCT) failures of the following types.
  156. //
  157.  
  158. #define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP   0x00008000 // ex: https:// to http://
  159. #define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS  0x00004000 // ex: http:// to https://
  160. #define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000 // expired X509 Cert.
  161. #define INTERNET_FLAG_IGNORE_CERT_CN_INVALID    0x00001000 // bad common name in X509 Cert.
  162.  
  163. //
  164. // more caching flags
  165. //
  166.  
  167. #define INTERNET_FLAG_RESYNCHRONIZE     0x00000800  // asking wininet to update an item if it is newer
  168. #define INTERNET_FLAG_HYPERLINK         0x00000400  // asking wininet to do hyperlinking semantic which works right for scripts
  169. #define INTERNET_FLAG_NO_UI             0x00000200  // no cookie popup
  170. #define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100  // asking wininet to add "pragma: no-cache"
  171. #define INTERNET_FLAG_CACHE_ASYNC       0x00000080  // ok to perform lazy cache-write
  172. #define INTERNET_FLAG_FORMS_SUBMIT      0x00000040  // this is a forms submit
  173. #define INTERNET_FLAG_NEED_FILE         0x00000010  // need a file for this request
  174. #define INTERNET_FLAG_MUST_CACHE_REQUEST INTERNET_FLAG_NEED_FILE
  175.  
  176. //
  177. // flags for FTP
  178. //
  179.  
  180. #define INTERNET_FLAG_TRANSFER_ASCII    FTP_TRANSFER_TYPE_ASCII     // 0x00000001
  181. #define INTERNET_FLAG_TRANSFER_BINARY   FTP_TRANSFER_TYPE_BINARY    // 0x00000002
  182.  
  183. //
  184. // flags field masks
  185. //
  186.  
  187. #define SECURITY_INTERNET_MASK  (INTERNET_FLAG_IGNORE_CERT_CN_INVALID    |  \
  188.                                  INTERNET_FLAG_IGNORE_CERT_DATE_INVALID  |  \
  189.                                  INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS  |  \
  190.                                  INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP   )
  191.  
  192. #define INTERNET_FLAGS_MASK     (INTERNET_FLAG_RELOAD               \
  193.                                 | INTERNET_FLAG_RAW_DATA            \
  194.                                 | INTERNET_FLAG_EXISTING_CONNECT    \
  195.                                 | INTERNET_FLAG_ASYNC               \
  196.                                 | INTERNET_FLAG_PASSIVE             \
  197.                                 | INTERNET_FLAG_NO_CACHE_WRITE      \
  198.                                 | INTERNET_FLAG_MAKE_PERSISTENT     \
  199.                                 | INTERNET_FLAG_FROM_CACHE          \
  200.                                 | INTERNET_FLAG_SECURE              \
  201.                                 | INTERNET_FLAG_KEEP_CONNECTION     \
  202.                                 | INTERNET_FLAG_NO_AUTO_REDIRECT    \
  203.                                 | INTERNET_FLAG_READ_PREFETCH       \
  204.                                 | INTERNET_FLAG_NO_COOKIES          \
  205.                                 | INTERNET_FLAG_NO_AUTH             \
  206.                                 | INTERNET_FLAG_CACHE_IF_NET_FAIL   \
  207.                                 | SECURITY_INTERNET_MASK            \
  208.                                 | INTERNET_FLAG_RESYNCHRONIZE       \
  209.                                 | INTERNET_FLAG_HYPERLINK           \
  210.                                 | INTERNET_FLAG_NO_UI               \
  211.                                 | INTERNET_FLAG_PRAGMA_NOCACHE      \
  212.                                 | INTERNET_FLAG_CACHE_ASYNC         \
  213.                                 | INTERNET_FLAG_FORMS_SUBMIT        \
  214.                                 | INTERNET_FLAG_NEED_FILE           \
  215.                                 | INTERNET_FLAG_TRANSFER_BINARY     \
  216.                                 | INTERNET_FLAG_TRANSFER_ASCII      \
  217.                                 )
  218.  
  219. #define INTERNET_ERROR_MASK_INSERT_CDROM                    0x1
  220.  
  221. #define INTERNET_OPTIONS_MASK   (~INTERNET_FLAGS_MASK)
  222.  
  223. //
  224. // common per-API flags (new APIs)
  225. //
  226.  
  227. #define WININET_API_FLAG_ASYNC          0x00000001  // force async operation
  228. #define WININET_API_FLAG_SYNC           0x00000004  // force sync operation
  229. #define WININET_API_FLAG_USE_CONTEXT    0x00000008  // use value supplied in dwContext (even if 0)
  230.  
  231. //
  232. // INTERNET_NO_CALLBACK - if this value is presented as the dwContext parameter
  233. // then no call-backs will be made for that API
  234. //
  235.  
  236. #define INTERNET_NO_CALLBACK            0
  237.  
  238. //
  239. // structures/types
  240. //
  241.  
  242. //
  243. // INTERNET_SCHEME - enumerated URL scheme type
  244. //
  245.  
  246. typedef enum {
  247.     INTERNET_SCHEME_PARTIAL = -2,
  248.     INTERNET_SCHEME_UNKNOWN = -1,
  249.     INTERNET_SCHEME_DEFAULT = 0,
  250.     INTERNET_SCHEME_FTP,
  251.     INTERNET_SCHEME_GOPHER,
  252.     INTERNET_SCHEME_HTTP,
  253.     INTERNET_SCHEME_HTTPS,
  254.     INTERNET_SCHEME_FILE,
  255.     INTERNET_SCHEME_NEWS,
  256.     INTERNET_SCHEME_MAILTO,
  257.     INTERNET_SCHEME_SOCKS,
  258.     INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
  259.     INTERNET_SCHEME_LAST = INTERNET_SCHEME_SOCKS
  260. } INTERNET_SCHEME, * LPINTERNET_SCHEME;
  261.  
  262. //
  263. // INTERNET_ASYNC_RESULT - this structure is returned to the application via
  264. // the callback with INTERNET_STATUS_REQUEST_COMPLETE. It is not sufficient to
  265. // just return the result of the async operation. If the API failed then the
  266. // app cannot call GetLastError() because the thread context will be incorrect.
  267. // Both the value returned by the async API and any resultant error code are
  268. // made available. The app need not check dwError if dwResult indicates that
  269. // the API succeeded (in this case dwError will be ERROR_SUCCESS)
  270. //
  271.  
  272. typedef struct {
  273.  
  274.     //
  275.     // dwResult - the HINTERNET, DWORD or BOOL return code from an async API
  276.     //
  277.  
  278.     DWORD dwResult;
  279.  
  280.     //
  281.     // dwError - the error code if the API failed
  282.     //
  283.  
  284.     DWORD dwError;
  285. } INTERNET_ASYNC_RESULT, * LPINTERNET_ASYNC_RESULT;
  286.  
  287.  
  288. //
  289. // INTERNET_PROXY_INFO - structure supplied with INTERNET_OPTION_PROXY to get/
  290. // set proxy information on a InternetOpen() handle
  291. //
  292.  
  293. typedef struct {
  294.  
  295.     //
  296.     // dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or
  297.     // INTERNET_OPEN_TYPE_PRECONFIG (set only)
  298.     //
  299.  
  300.     DWORD dwAccessType;
  301.  
  302.     //
  303.     // lpszProxy - proxy server list
  304.     //
  305.  
  306.     LPCTSTR lpszProxy;
  307.  
  308.     //
  309.     // lpszProxyBypass - proxy bypass list
  310.     //
  311.  
  312.     LPCTSTR lpszProxyBypass;
  313. } INTERNET_PROXY_INFO, * LPINTERNET_PROXY_INFO;
  314.  
  315. //
  316. // INTERNET_VERSION_INFO - version information returned via
  317. // InternetQueryOption(..., INTERNET_OPTION_VERSION, ...)
  318. //
  319.  
  320. typedef struct {
  321.     DWORD dwMajorVersion;
  322.     DWORD dwMinorVersion;
  323. } INTERNET_VERSION_INFO, * LPINTERNET_VERSION_INFO;
  324.  
  325. //
  326. // HTTP_VERSION_INFO - query or set global HTTP version (1.0 or 1.1)
  327. //
  328.  
  329. typedef struct {
  330.     DWORD dwMajorVersion;
  331.     DWORD dwMinorVersion;
  332. } HTTP_VERSION_INFO, * LPHTTP_VERSION_INFO;
  333.  
  334. //
  335. // INTERNET_CONNECTED_INFO - information used to set the global connected state
  336. //
  337.  
  338. typedef struct {
  339.  
  340.     //
  341.     // dwConnectedState - new connected/disconnected state.
  342.     // See INTERNET_STATE_CONNECTED, etc.
  343.     //
  344.  
  345.     DWORD dwConnectedState;
  346.  
  347.     //
  348.     // dwFlags - flags controlling connected->disconnected (or disconnected->
  349.     // connected) transition. See below
  350.     //
  351.  
  352.     DWORD dwFlags;
  353. } INTERNET_CONNECTED_INFO, * LPINTERNET_CONNECTED_INFO;
  354.  
  355.  
  356. //
  357. // flags for INTERNET_CONNECTED_INFO dwFlags
  358. //
  359.  
  360. //
  361. // ISO_FORCE_DISCONNECTED - if set when putting Wininet into disconnected mode,
  362. // all outstanding requests will be aborted with a cancelled error
  363. //
  364.  
  365. #define ISO_FORCE_DISCONNECTED  0x00000001
  366.  
  367.  
  368. //
  369. // URL_COMPONENTS - the constituent parts of an URL. Used in InternetCrackUrl()
  370. // and InternetCreateUrl()
  371. //
  372. // For InternetCrackUrl(), if a pointer field and its corresponding length field
  373. // are both 0 then that component is not returned. If the pointer field is NULL
  374. // but the length field is not zero, then both the pointer and length fields are
  375. // returned if both pointer and corresponding length fields are non-zero then
  376. // the pointer field points to a buffer where the component is copied. The
  377. // component may be un-escaped, depending on dwFlags
  378. //
  379. // For InternetCreateUrl(), the pointer fields should be NULL if the component
  380. // is not required. If the corresponding length field is zero then the pointer
  381. // field is the address of a zero-terminated string. If the length field is not
  382. // zero then it is the string length of the corresponding pointer field
  383. //
  384.  
  385. typedef struct {
  386.     DWORD   dwStructSize;       // size of this structure. Used in version check
  387.     LPSTR   lpszScheme;         // pointer to scheme name
  388.     DWORD   dwSchemeLength;     // length of scheme name
  389.     INTERNET_SCHEME nScheme;    // enumerated scheme type (if known)
  390.     LPSTR   lpszHostName;       // pointer to host name
  391.     DWORD   dwHostNameLength;   // length of host name
  392.     INTERNET_PORT nPort;        // converted port number
  393.     LPSTR   lpszUserName;       // pointer to user name
  394.     DWORD   dwUserNameLength;   // length of user name
  395.     LPSTR   lpszPassword;       // pointer to password
  396.     DWORD   dwPasswordLength;   // length of password
  397.     LPSTR   lpszUrlPath;        // pointer to URL-path
  398.     DWORD   dwUrlPathLength;    // length of URL-path
  399.     LPSTR   lpszExtraInfo;      // pointer to extra information (e.g. ?foo or #foo)
  400.     DWORD   dwExtraInfoLength;  // length of extra information
  401. } URL_COMPONENTSA, * LPURL_COMPONENTSA;
  402. typedef struct {
  403.     DWORD   dwStructSize;       // size of this structure. Used in version check
  404.     LPWSTR  lpszScheme;         // pointer to scheme name
  405.     DWORD   dwSchemeLength;     // length of scheme name
  406.     INTERNET_SCHEME nScheme;    // enumerated scheme type (if known)
  407.     LPWSTR  lpszHostName;       // pointer to host name
  408.     DWORD   dwHostNameLength;   // length of host name
  409.     INTERNET_PORT nPort;        // converted port number
  410.     LPWSTR  lpszUserName;       // pointer to user name
  411.     DWORD   dwUserNameLength;   // length of user name
  412.     LPWSTR  lpszPassword;       // pointer to password
  413.     DWORD   dwPasswordLength;   // length of password
  414.     LPWSTR  lpszUrlPath;        // pointer to URL-path
  415.     DWORD   dwUrlPathLength;    // length of URL-path
  416.     LPWSTR  lpszExtraInfo;      // pointer to extra information (e.g. ?foo or #foo)
  417.     DWORD   dwExtraInfoLength;  // length of extra information
  418. } URL_COMPONENTSW, * LPURL_COMPONENTSW;
  419. #ifdef UNICODE
  420. typedef URL_COMPONENTSW URL_COMPONENTS;
  421. typedef LPURL_COMPONENTSW LPURL_COMPONENTS;
  422. #else
  423. typedef URL_COMPONENTSA URL_COMPONENTS;
  424. typedef LPURL_COMPONENTSA LPURL_COMPONENTS;
  425. #endif // UNICODE
  426.  
  427.  
  428. //
  429. // INTERNET_CERTIFICATE_INFO lpBuffer - contains the certificate returned from
  430. // the server
  431. //
  432.  
  433. typedef struct {
  434.  
  435.     //
  436.     // ftExpiry - date the certificate expires.
  437.     //
  438.  
  439.     FILETIME ftExpiry;
  440.  
  441.     //
  442.     // ftStart - date the certificate becomes valid.
  443.     //
  444.  
  445.     FILETIME ftStart;
  446.  
  447.     //
  448.     // lpszSubjectInfo - the name of organization, site, and server
  449.     //   the cert. was issued for.
  450.     //
  451.  
  452.     LPTSTR lpszSubjectInfo;
  453.  
  454.     //
  455.     // lpszIssuerInfo - the name of orgainzation, site, and server
  456.     //   the cert was issues by.
  457.     //
  458.  
  459.     LPTSTR lpszIssuerInfo;
  460.  
  461.     //
  462.     // lpszProtocolName - the name of the protocol used to provide the secure
  463.     //   connection.
  464.     //
  465.  
  466.     LPTSTR lpszProtocolName;
  467.  
  468.     //
  469.     // lpszSignatureAlgName - the name of the algorithm used for signing
  470.     //  the certificate.
  471.     //
  472.  
  473.     LPTSTR lpszSignatureAlgName;
  474.  
  475.     //
  476.     // lpszEncryptionAlgName - the name of the algorithm used for
  477.     //  doing encryption over the secure channel (SSL/PCT) connection.
  478.     //
  479.  
  480.     LPTSTR lpszEncryptionAlgName;
  481.  
  482.     //
  483.     // dwKeySize - size of the key.
  484.     //
  485.  
  486.     DWORD dwKeySize;
  487.  
  488. } INTERNET_CERTIFICATE_INFO, * LPINTERNET_CERTIFICATE_INFO;
  489.  
  490.  
  491. //
  492. // INTERNET_BUFFERS - combines headers and data. May be chained for e.g. file
  493. // upload or scatter/gather operations. For chunked read/write, lpcszHeader
  494. // contains the chunked-ext
  495. //
  496.  
  497. typedef struct _INTERNET_BUFFERSA {
  498.     DWORD dwStructSize;                 // used for API versioning. Set to sizeof(INTERNET_BUFFERS)
  499.     struct _INTERNET_BUFFERSA * Next;   // chain of buffers
  500.     LPCSTR   lpcszHeader;               // pointer to headers (may be NULL)
  501.     DWORD dwHeadersLength;              // length of headers if not NULL
  502.     DWORD dwHeadersTotal;               // size of headers if not enough buffer
  503.     LPVOID lpvBuffer;                   // pointer to data buffer (may be NULL)
  504.     DWORD dwBufferLength;               // length of data buffer if not NULL
  505.     DWORD dwBufferTotal;                // total size of chunk, or content-length if not chunked
  506.     DWORD dwOffsetLow;                  // used for read-ranges (only used in HttpSendRequest2)
  507.     DWORD dwOffsetHigh;
  508. } INTERNET_BUFFERSA, * LPINTERNET_BUFFERSA;
  509. typedef struct _INTERNET_BUFFERSW {
  510.     DWORD dwStructSize;                 // used for API versioning. Set to sizeof(INTERNET_BUFFERS)
  511.     struct _INTERNET_BUFFERSW * Next;   // chain of buffers
  512.     LPCWSTR  lpcszHeader;               // pointer to headers (may be NULL)
  513.     DWORD dwHeadersLength;              // length of headers if not NULL
  514.     DWORD dwHeadersTotal;               // size of headers if not enough buffer
  515.     LPVOID lpvBuffer;                   // pointer to data buffer (may be NULL)
  516.     DWORD dwBufferLength;               // length of data buffer if not NULL
  517.     DWORD dwBufferTotal;                // total size of chunk, or content-length if not chunked
  518.     DWORD dwOffsetLow;                  // used for read-ranges (only used in HttpSendRequest2)
  519.     DWORD dwOffsetHigh;
  520. } INTERNET_BUFFERSW, * LPINTERNET_BUFFERSW;
  521. #ifdef UNICODE
  522. typedef INTERNET_BUFFERSW INTERNET_BUFFERS;
  523. typedef LPINTERNET_BUFFERSW LPINTERNET_BUFFERS;
  524. #else
  525. typedef INTERNET_BUFFERSA INTERNET_BUFFERS;
  526. typedef LPINTERNET_BUFFERSA LPINTERNET_BUFFERS;
  527. #endif // UNICODE
  528.  
  529. //
  530. // prototypes
  531. //
  532.  
  533. BOOLAPI
  534. InternetTimeFromSystemTime(
  535.     IN  CONST SYSTEMTIME *pst,  // input GMT time
  536.     IN  DWORD dwRFC,            // RFC format
  537.     OUT LPSTR lpszTime,         // output string buffer
  538.     IN  DWORD cbTime            // output buffer size
  539.     );
  540.  
  541. //
  542. // constants for InternetTimeFromSystemTime
  543. //
  544.  
  545. #define INTERNET_RFC1123_FORMAT     0
  546. #define INTERNET_RFC1123_BUFSIZE   30
  547.  
  548. BOOLAPI
  549. InternetTimeToSystemTime(
  550.     IN  LPCSTR lpszTime,         // NULL terminated string
  551.     OUT SYSTEMTIME *pst,         // output in GMT time
  552.     IN  DWORD dwReserved
  553.     );
  554.  
  555.  
  556. BOOLAPI
  557. InternetCrackUrlA(
  558.     IN LPCSTR lpszUrl,
  559.     IN DWORD dwUrlLength,
  560.     IN DWORD dwFlags,
  561.     IN OUT LPURL_COMPONENTSA lpUrlComponents
  562.     );
  563. BOOLAPI
  564. InternetCrackUrlW(
  565.     IN LPCWSTR lpszUrl,
  566.     IN DWORD dwUrlLength,
  567.     IN DWORD dwFlags,
  568.     IN OUT LPURL_COMPONENTSW lpUrlComponents
  569.     );
  570. #ifdef UNICODE
  571. #define InternetCrackUrl  InternetCrackUrlW
  572. #else
  573. #define InternetCrackUrl  InternetCrackUrlA
  574. #endif // !UNICODE
  575.  
  576. BOOLAPI
  577. InternetCreateUrlA(
  578.     IN LPURL_COMPONENTSA lpUrlComponents,
  579.     IN DWORD dwFlags,
  580.     OUT LPSTR lpszUrl,
  581.     IN OUT LPDWORD lpdwUrlLength
  582.     );
  583. BOOLAPI
  584. InternetCreateUrlW(
  585.     IN LPURL_COMPONENTSW lpUrlComponents,
  586.     IN DWORD dwFlags,
  587.     OUT LPWSTR lpszUrl,
  588.     IN OUT LPDWORD lpdwUrlLength
  589.     );
  590. #ifdef UNICODE
  591. #define InternetCreateUrl  InternetCreateUrlW
  592. #else
  593. #define InternetCreateUrl  InternetCreateUrlA
  594. #endif // !UNICODE
  595.  
  596. BOOLAPI
  597. InternetCanonicalizeUrlA(
  598.     IN LPCSTR lpszUrl,
  599.     OUT LPSTR lpszBuffer,
  600.     IN OUT LPDWORD lpdwBufferLength,
  601.     IN DWORD dwFlags
  602.     );
  603. BOOLAPI
  604. InternetCanonicalizeUrlW(
  605.     IN LPCWSTR lpszUrl,
  606.     OUT LPWSTR lpszBuffer,
  607.     IN OUT LPDWORD lpdwBufferLength,
  608.     IN DWORD dwFlags
  609.     );
  610. #ifdef UNICODE
  611. #define InternetCanonicalizeUrl  InternetCanonicalizeUrlW
  612. #else
  613. #define InternetCanonicalizeUrl  InternetCanonicalizeUrlA
  614. #endif // !UNICODE
  615.  
  616. BOOLAPI
  617. InternetCombineUrlA(
  618.     IN LPCSTR lpszBaseUrl,
  619.     IN LPCSTR lpszRelativeUrl,
  620.     OUT LPSTR lpszBuffer,
  621.     IN OUT LPDWORD lpdwBufferLength,
  622.     IN DWORD dwFlags
  623.     );
  624. BOOLAPI
  625. InternetCombineUrlW(
  626.     IN LPCWSTR lpszBaseUrl,
  627.     IN LPCWSTR lpszRelativeUrl,
  628.     OUT LPWSTR lpszBuffer,
  629.     IN OUT LPDWORD lpdwBufferLength,
  630.     IN DWORD dwFlags
  631.     );
  632. #ifdef UNICODE
  633. #define InternetCombineUrl  InternetCombineUrlW
  634. #else
  635. #define InternetCombineUrl  InternetCombineUrlA
  636. #endif // !UNICODE
  637.  
  638. //
  639. // flags for InternetCrackUrl() and InternetCreateUrl()
  640. //
  641.  
  642. #define ICU_ESCAPE      0x80000000  // (un)escape URL characters
  643. #define ICU_USERNAME    0x40000000  // use internal username & password
  644.  
  645. //
  646. // flags for InternetCanonicalizeUrl() and InternetCombineUrl()
  647. //
  648.  
  649. #define ICU_NO_ENCODE   0x20000000  // Don't convert unsafe characters to escape sequence
  650. #define ICU_DECODE      0x10000000  // Convert %XX escape sequences to characters
  651. #define ICU_NO_META     0x08000000  // Don't convert .. etc. meta path sequences
  652. #define ICU_ENCODE_SPACES_ONLY 0x04000000  // Encode spaces only
  653. #define ICU_BROWSER_MODE 0x02000000 // Special encode/decode rules for browser
  654.  
  655. INTERNETAPI
  656. HINTERNET
  657. WINAPI
  658. InternetOpenA(
  659.     IN LPCSTR lpszAgent,
  660.     IN DWORD dwAccessType,
  661.     IN LPCSTR lpszProxy OPTIONAL,
  662.     IN LPCSTR lpszProxyBypass OPTIONAL,
  663.     IN DWORD dwFlags
  664.     );
  665. INTERNETAPI
  666. HINTERNET
  667. WINAPI
  668. InternetOpenW(
  669.     IN LPCWSTR lpszAgent,
  670.     IN DWORD dwAccessType,
  671.     IN LPCWSTR lpszProxy OPTIONAL,
  672.     IN LPCWSTR lpszProxyBypass OPTIONAL,
  673.     IN DWORD dwFlags
  674.     );
  675. #ifdef UNICODE
  676. #define InternetOpen  InternetOpenW
  677. #else
  678. #define InternetOpen  InternetOpenA
  679. #endif // !UNICODE
  680.  
  681. //
  682. // access types for InternetOpen()
  683. //
  684.  
  685. #define INTERNET_OPEN_TYPE_PRECONFIG                    0   // use registry configuration
  686. #define INTERNET_OPEN_TYPE_DIRECT                       1   // direct to net
  687. #define INTERNET_OPEN_TYPE_PROXY                        3   // via named proxy
  688. #define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4   // prevent using java/script/INS
  689.  
  690. //
  691. // old names for access types
  692. //
  693.  
  694. #define PRE_CONFIG_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PRECONFIG
  695. #define LOCAL_INTERNET_ACCESS       INTERNET_OPEN_TYPE_DIRECT
  696. #define CERN_PROXY_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PROXY
  697.  
  698. BOOLAPI
  699. InternetCloseHandle(
  700.     IN HINTERNET hInternet
  701.     );
  702.  
  703. INTERNETAPI
  704. HINTERNET
  705. WINAPI
  706. InternetConnectA(
  707.     IN HINTERNET hInternet,
  708.     IN LPCSTR lpszServerName,
  709.     IN INTERNET_PORT nServerPort,
  710.     IN LPCSTR lpszUserName OPTIONAL,
  711.     IN LPCSTR lpszPassword OPTIONAL,
  712.     IN DWORD dwService,
  713.     IN DWORD dwFlags,
  714.     IN DWORD dwContext
  715.     );
  716. INTERNETAPI
  717. HINTERNET
  718. WINAPI
  719. InternetConnectW(
  720.     IN HINTERNET hInternet,
  721.     IN LPCWSTR lpszServerName,
  722.     IN INTERNET_PORT nServerPort,
  723.     IN LPCWSTR lpszUserName OPTIONAL,
  724.     IN LPCWSTR lpszPassword OPTIONAL,
  725.     IN DWORD dwService,
  726.     IN DWORD dwFlags,
  727.     IN DWORD dwContext
  728.     );
  729. #ifdef UNICODE
  730. #define InternetConnect  InternetConnectW
  731. #else
  732. #define InternetConnect  InternetConnectA
  733. #endif // !UNICODE
  734.  
  735. //
  736. // service types for InternetConnect()
  737. //
  738.  
  739. #define INTERNET_SERVICE_URL    0
  740. #define INTERNET_SERVICE_FTP    1
  741. #define INTERNET_SERVICE_GOPHER 2
  742. #define INTERNET_SERVICE_HTTP   3
  743.  
  744. //
  745. // InternetConnectUrl() - a macro which allows you to specify an URL instead of
  746. // the component parts to InternetConnect(). If any API which uses the returned
  747. // connect handle specifies a NULL path then the URL-path part of the URL
  748. // specified in InternetConnectUrl() will be used
  749. //
  750.  
  751. #define InternetConnectUrl(hInternet, lpszUrl, dwFlags, dwContext) \
  752.     InternetConnect(hInternet,                      \
  753.                     lpszUrl,                        \
  754.                     INTERNET_INVALID_PORT_NUMBER,   \
  755.                     NULL,                           \
  756.                     NULL,                           \
  757.                     INTERNET_SERVICE_URL,           \
  758.                     dwFlags,                        \
  759.                     dwContext                       \
  760.                     )
  761.  
  762. INTERNETAPI
  763. HINTERNET
  764. WINAPI
  765. InternetOpenUrlA(
  766.     IN HINTERNET hInternet,
  767.     IN LPCSTR lpszUrl,
  768.     IN LPCSTR lpszHeaders OPTIONAL,
  769.     IN DWORD dwHeadersLength,
  770.     IN DWORD dwFlags,
  771.     IN DWORD dwContext
  772.     );
  773. INTERNETAPI
  774. HINTERNET
  775. WINAPI
  776. InternetOpenUrlW(
  777.     IN HINTERNET hInternet,
  778.     IN LPCWSTR lpszUrl,
  779.     IN LPCWSTR lpszHeaders OPTIONAL,
  780.     IN DWORD dwHeadersLength,
  781.     IN DWORD dwFlags,
  782.     IN DWORD dwContext
  783.     );
  784. #ifdef UNICODE
  785. #define InternetOpenUrl  InternetOpenUrlW
  786. #else
  787. #define InternetOpenUrl  InternetOpenUrlA
  788. #endif // !UNICODE
  789.  
  790. BOOLAPI
  791. InternetReadFile(
  792.     IN HINTERNET hFile,
  793.     IN LPVOID lpBuffer,
  794.     IN DWORD dwNumberOfBytesToRead,
  795.     OUT LPDWORD lpdwNumberOfBytesRead
  796.     );
  797.  
  798. INTERNETAPI
  799. BOOL
  800. WINAPI
  801. InternetReadFileExA(
  802.     IN HINTERNET hFile,
  803.     OUT LPINTERNET_BUFFERSA lpBuffersOut,
  804.     IN DWORD dwFlags,
  805.     IN DWORD dwContext
  806.     );
  807. INTERNETAPI
  808. BOOL
  809. WINAPI
  810. InternetReadFileExW(
  811.     IN HINTERNET hFile,
  812.     OUT LPINTERNET_BUFFERSW lpBuffersOut,
  813.     IN DWORD dwFlags,
  814.     IN DWORD dwContext
  815.     );
  816. #ifdef UNICODE
  817. #define InternetReadFileEx  InternetReadFileExW
  818. #else
  819. #define InternetReadFileEx  InternetReadFileExA
  820. #endif // !UNICODE
  821.  
  822. //
  823. // flags for InternetReadFileEx()
  824. //
  825.  
  826. #define IRF_ASYNC       WININET_API_FLAG_ASYNC
  827. #define IRF_SYNC        WININET_API_FLAG_SYNC
  828. #define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
  829. #define IRF_NO_WAIT     0x00000008
  830.  
  831. INTERNETAPI
  832. DWORD
  833. WINAPI
  834. InternetSetFilePointer(
  835.     IN HINTERNET hFile,
  836.     IN LONG  lDistanceToMove,
  837.     IN PVOID pReserved,
  838.     IN DWORD dwMoveMethod,
  839.     IN DWORD dwContext
  840.     );
  841.  
  842. BOOLAPI
  843. InternetWriteFile(
  844.     IN HINTERNET hFile,
  845.     IN LPCVOID lpBuffer,
  846.     IN DWORD dwNumberOfBytesToWrite,
  847.     OUT LPDWORD lpdwNumberOfBytesWritten
  848.     );
  849.  
  850.  
  851. BOOLAPI
  852. InternetQueryDataAvailable(
  853.     IN HINTERNET hFile,
  854.     OUT LPDWORD lpdwNumberOfBytesAvailable OPTIONAL,
  855.     IN DWORD dwFlags,
  856.     IN DWORD dwContext
  857.     );
  858.  
  859. BOOLAPI
  860. InternetFindNextFileA(
  861.     IN HINTERNET hFind,
  862.     OUT LPVOID lpvFindData
  863.     );
  864. BOOLAPI
  865. InternetFindNextFileW(
  866.     IN HINTERNET hFind,
  867.     OUT LPVOID lpvFindData
  868.     );
  869. #ifdef UNICODE
  870. #define InternetFindNextFile  InternetFindNextFileW
  871. #else
  872. #define InternetFindNextFile  InternetFindNextFileA
  873. #endif // !UNICODE
  874.  
  875. BOOLAPI
  876. InternetQueryOptionA(
  877.     IN HINTERNET hInternet OPTIONAL,
  878.     IN DWORD dwOption,
  879.     OUT LPVOID lpBuffer OPTIONAL,
  880.     IN OUT LPDWORD lpdwBufferLength
  881.     );
  882. BOOLAPI
  883. InternetQueryOptionW(
  884.     IN HINTERNET hInternet OPTIONAL,
  885.     IN DWORD dwOption,
  886.     OUT LPVOID lpBuffer OPTIONAL,
  887.     IN OUT LPDWORD lpdwBufferLength
  888.     );
  889. #ifdef UNICODE
  890. #define InternetQueryOption  InternetQueryOptionW
  891. #else
  892. #define InternetQueryOption  InternetQueryOptionA
  893. #endif // !UNICODE
  894.  
  895. BOOLAPI
  896. InternetSetOptionA(
  897.     IN HINTERNET hInternet OPTIONAL,
  898.     IN DWORD dwOption,
  899.     IN LPVOID lpBuffer,
  900.     IN DWORD dwBufferLength
  901.     );
  902. BOOLAPI
  903. InternetSetOptionW(
  904.     IN HINTERNET hInternet OPTIONAL,
  905.     IN DWORD dwOption,
  906.     IN LPVOID lpBuffer,
  907.     IN DWORD dwBufferLength
  908.     );
  909. #ifdef UNICODE
  910. #define InternetSetOption  InternetSetOptionW
  911. #else
  912. #define InternetSetOption  InternetSetOptionA
  913. #endif // !UNICODE
  914.  
  915. BOOLAPI
  916. InternetSetOptionExA(
  917.     IN HINTERNET hInternet OPTIONAL,
  918.     IN DWORD dwOption,
  919.     IN LPVOID lpBuffer,
  920.     IN DWORD dwBufferLength,
  921.     IN DWORD dwFlags
  922.     );
  923. BOOLAPI
  924. InternetSetOptionExW(
  925.     IN HINTERNET hInternet OPTIONAL,
  926.     IN DWORD dwOption,
  927.     IN LPVOID lpBuffer,
  928.     IN DWORD dwBufferLength,
  929.     IN DWORD dwFlags
  930.     );
  931. #ifdef UNICODE
  932. #define InternetSetOptionEx  InternetSetOptionExW
  933. #else
  934. #define InternetSetOptionEx  InternetSetOptionExA
  935. #endif // !UNICODE
  936.  
  937. BOOLAPI
  938. InternetLockRequestFile(
  939.     IN  HINTERNET hInternet,
  940.     OUT HANDLE * lphLockRequestInfo
  941.     );
  942.  
  943. BOOLAPI
  944. InternetUnlockRequestFile(
  945.     IN HANDLE hLockRequestInfo
  946.     );
  947.  
  948. //
  949. // flags for InternetSetOptionEx()
  950. //
  951.  
  952. #define ISO_GLOBAL      0x00000001  // modify option globally
  953. #define ISO_REGISTRY    0x00000002  // write option to registry (where applicable)
  954.  
  955. #define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY)
  956.  
  957. //
  958. // options manifests for Internet{Query|Set}Option
  959. //
  960.  
  961. #define INTERNET_OPTION_CALLBACK                1
  962. #define INTERNET_OPTION_CONNECT_TIMEOUT         2
  963. #define INTERNET_OPTION_CONNECT_RETRIES         3
  964. #define INTERNET_OPTION_CONNECT_BACKOFF         4
  965. #define INTERNET_OPTION_SEND_TIMEOUT            5
  966. #define INTERNET_OPTION_CONTROL_SEND_TIMEOUT    INTERNET_OPTION_SEND_TIMEOUT
  967. #define INTERNET_OPTION_RECEIVE_TIMEOUT         6
  968. #define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT
  969. #define INTERNET_OPTION_DATA_SEND_TIMEOUT       7
  970. #define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT    8
  971. #define INTERNET_OPTION_HANDLE_TYPE             9
  972. #define INTERNET_OPTION_LISTEN_TIMEOUT          11
  973. #define INTERNET_OPTION_READ_BUFFER_SIZE        12
  974. #define INTERNET_OPTION_WRITE_BUFFER_SIZE       13
  975.  
  976. #define INTERNET_OPTION_ASYNC_ID                15
  977. #define INTERNET_OPTION_ASYNC_PRIORITY          16
  978.  
  979. #define INTERNET_OPTION_PARENT_HANDLE           21
  980. #define INTERNET_OPTION_KEEP_CONNECTION         22
  981. #define INTERNET_OPTION_REQUEST_FLAGS           23
  982. #define INTERNET_OPTION_EXTENDED_ERROR          24
  983.  
  984. #define INTERNET_OPTION_OFFLINE_MODE            26
  985. #define INTERNET_OPTION_CACHE_STREAM_HANDLE     27
  986. #define INTERNET_OPTION_USERNAME                28
  987. #define INTERNET_OPTION_PASSWORD                29
  988. #define INTERNET_OPTION_ASYNC                   30
  989. #define INTERNET_OPTION_SECURITY_FLAGS          31
  990. #define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32
  991. #define INTERNET_OPTION_DATAFILE_NAME           33
  992. #define INTERNET_OPTION_URL                     34
  993. #define INTERNET_OPTION_SECURITY_CERTIFICATE    35
  994. #define INTERNET_OPTION_SECURITY_KEY_BITNESS    36
  995. #define INTERNET_OPTION_REFRESH                 37
  996. #define INTERNET_OPTION_PROXY                   38
  997. #define INTERNET_OPTION_SETTINGS_CHANGED        39
  998. #define INTERNET_OPTION_VERSION                 40
  999. #define INTERNET_OPTION_USER_AGENT              41
  1000. #define INTERNET_OPTION_END_BROWSER_SESSION     42
  1001. #define INTERNET_OPTION_PROXY_USERNAME          43
  1002. #define INTERNET_OPTION_PROXY_PASSWORD          44
  1003. #define INTERNET_OPTION_CONTEXT_VALUE           45
  1004. #define INTERNET_OPTION_CONNECT_LIMIT           46
  1005. #define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47
  1006. #define INTERNET_OPTION_POLICY                  48
  1007. #define INTERNET_OPTION_DISCONNECTED_TIMEOUT    49
  1008. #define INTERNET_OPTION_CONNECTED_STATE         50
  1009. #define INTERNET_OPTION_IDLE_STATE              51
  1010. #define INTERNET_OPTION_OFFLINE_SEMANTICS       52
  1011. #define INTERNET_OPTION_SECONDARY_CACHE_KEY     53
  1012. #define INTERNET_OPTION_CALLBACK_FILTER         54
  1013. #define INTERNET_OPTION_CONNECT_TIME            55
  1014. #define INTERNET_OPTION_SEND_THROUGHPUT         56
  1015. #define INTERNET_OPTION_RECEIVE_THROUGHPUT      57
  1016. #define INTERNET_OPTION_REQUEST_PRIORITY        58
  1017. #define INTERNET_OPTION_HTTP_VERSION            59
  1018. #define INTERNET_OPTION_RESET_URLCACHE_SESSION  60
  1019. #define INTERNET_OPTION_ERROR_MASK              62
  1020.  
  1021. #define INTERNET_FIRST_OPTION                   INTERNET_OPTION_CALLBACK
  1022. #define INTERNET_LAST_OPTION                    INTERNET_OPTION_ERROR_MASK
  1023.  
  1024.  
  1025. //
  1026. // values for INTERNET_OPTION_PRIORITY
  1027. //
  1028.  
  1029. #define INTERNET_PRIORITY_FOREGROUND            1000
  1030.  
  1031. //
  1032. // handle types
  1033. //
  1034.  
  1035. #define INTERNET_HANDLE_TYPE_INTERNET           1
  1036. #define INTERNET_HANDLE_TYPE_CONNECT_FTP        2
  1037. #define INTERNET_HANDLE_TYPE_CONNECT_GOPHER     3
  1038. #define INTERNET_HANDLE_TYPE_CONNECT_HTTP       4
  1039. #define INTERNET_HANDLE_TYPE_FTP_FIND           5
  1040. #define INTERNET_HANDLE_TYPE_FTP_FIND_HTML      6
  1041. #define INTERNET_HANDLE_TYPE_FTP_FILE           7
  1042. #define INTERNET_HANDLE_TYPE_FTP_FILE_HTML      8
  1043. #define INTERNET_HANDLE_TYPE_GOPHER_FIND        9
  1044. #define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML   10
  1045. #define INTERNET_HANDLE_TYPE_GOPHER_FILE        11
  1046. #define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML   12
  1047. #define INTERNET_HANDLE_TYPE_HTTP_REQUEST       13
  1048.  
  1049. //
  1050. // values for INTERNET_OPTION_SECURITY_FLAGS
  1051. //
  1052.  
  1053. // query only
  1054. #define SECURITY_FLAG_SECURE                    0x00000001 // can query only
  1055. #define SECURITY_FLAG_STRENGTH_WEAK             0x10000000
  1056. #define SECURITY_FLAG_STRENGTH_MEDIUM           0x40000000
  1057. #define SECURITY_FLAG_STRENGTH_STRONG           0x20000000
  1058. #define SECURITY_FLAG_UNKNOWNBIT                0x80000000
  1059. #define SECURITY_FLAG_NORMALBITNESS             SECURITY_FLAG_STRENGTH_WEAK
  1060.  
  1061.  
  1062.  
  1063. // The following are unused
  1064. #define SECURITY_FLAG_SSL                       0x00000002
  1065. #define SECURITY_FLAG_SSL3                      0x00000004
  1066. #define SECURITY_FLAG_PCT                       0x00000008
  1067. #define SECURITY_FLAG_PCT4                      0x00000010
  1068. #define SECURITY_FLAG_IETFSSL4                  0x00000020
  1069.  
  1070. // The following are for backwards compatability only.
  1071. #define SECURITY_FLAG_40BIT                     SECURITY_FLAG_STRENGTH_WEAK
  1072. #define SECURITY_FLAG_128BIT                    SECURITY_FLAG_STRENGTH_STRONG
  1073. #define SECURITY_FLAG_56BIT                     SECURITY_FLAG_STRENGTH_MEDIUM
  1074.  
  1075.  
  1076. // setable flags
  1077. #define SECURITY_FLAG_IGNORE_REVOCATION         0x00000080
  1078. #define SECURITY_FLAG_IGNORE_UNKNOWN_CA         0x00000100
  1079. #define SECURITY_FLAG_IGNORE_WRONG_USAGE        0x00000200
  1080.  
  1081. #define SECURITY_FLAG_IGNORE_CERT_CN_INVALID    INTERNET_FLAG_IGNORE_CERT_CN_INVALID
  1082. #define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID  INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
  1083.  
  1084.  
  1085. #define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS  INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
  1086. #define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP   INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
  1087.  
  1088.  
  1089.  
  1090. #define SECURITY_SET_MASK       (SECURITY_FLAG_IGNORE_REVOCATION |\
  1091.                                  SECURITY_FLAG_IGNORE_UNKNOWN_CA |\
  1092.                                  SECURITY_FLAG_IGNORE_CERT_CN_INVALID |\
  1093.                                  SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |\
  1094.                                  SECURITY_FLAG_IGNORE_WRONG_USAGE)
  1095.  
  1096.  
  1097.  
  1098. BOOLAPI
  1099. InternetGetLastResponseInfoA(
  1100.     OUT LPDWORD lpdwError,
  1101.     OUT LPSTR lpszBuffer OPTIONAL,
  1102.     IN OUT LPDWORD lpdwBufferLength
  1103.     );
  1104. BOOLAPI
  1105. InternetGetLastResponseInfoW(
  1106.     OUT LPDWORD lpdwError,
  1107.     OUT LPWSTR lpszBuffer OPTIONAL,
  1108.     IN OUT LPDWORD lpdwBufferLength
  1109.     );
  1110. #ifdef UNICODE
  1111. #define InternetGetLastResponseInfo  InternetGetLastResponseInfoW
  1112. #else
  1113. #define InternetGetLastResponseInfo  InternetGetLastResponseInfoA
  1114. #endif // !UNICODE
  1115.  
  1116. //
  1117. // callback function for InternetSetStatusCallback
  1118. //
  1119.  
  1120. typedef
  1121. VOID
  1122. (CALLBACK * INTERNET_STATUS_CALLBACK)(
  1123.     IN HINTERNET hInternet,
  1124.     IN DWORD dwContext,
  1125.     IN DWORD dwInternetStatus,
  1126.     IN LPVOID lpvStatusInformation OPTIONAL,
  1127.     IN DWORD dwStatusInformationLength
  1128.     );
  1129.  
  1130. typedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK;
  1131.  
  1132. INTERNETAPI
  1133. INTERNET_STATUS_CALLBACK
  1134. WINAPI
  1135. InternetSetStatusCallback(
  1136.     IN HINTERNET hInternet,
  1137.     IN INTERNET_STATUS_CALLBACK lpfnInternetCallback
  1138.     );
  1139.  
  1140. //
  1141. // status manifests for Internet status callback
  1142. //
  1143.  
  1144. #define INTERNET_STATUS_RESOLVING_NAME          10
  1145. #define INTERNET_STATUS_NAME_RESOLVED           11
  1146. #define INTERNET_STATUS_CONNECTING_TO_SERVER    20
  1147. #define INTERNET_STATUS_CONNECTED_TO_SERVER     21
  1148. #define INTERNET_STATUS_SENDING_REQUEST         30
  1149. #define INTERNET_STATUS_REQUEST_SENT            31
  1150. #define INTERNET_STATUS_RECEIVING_RESPONSE      40
  1151. #define INTERNET_STATUS_RESPONSE_RECEIVED       41
  1152. #define INTERNET_STATUS_CTL_RESPONSE_RECEIVED   42
  1153. #define INTERNET_STATUS_PREFETCH                43
  1154. #define INTERNET_STATUS_CLOSING_CONNECTION      50
  1155. #define INTERNET_STATUS_CONNECTION_CLOSED       51
  1156. #define INTERNET_STATUS_HANDLE_CREATED          60
  1157. #define INTERNET_STATUS_HANDLE_CLOSING          70
  1158. #define INTERNET_STATUS_REQUEST_COMPLETE        100
  1159. #define INTERNET_STATUS_REDIRECT                110
  1160. #define INTERNET_STATUS_INTERMEDIATE_RESPONSE   120
  1161. #define INTERNET_STATUS_STATE_CHANGE            200
  1162.  
  1163. //
  1164. // the following can be indicated in a state change notification:
  1165. //
  1166.  
  1167. #define INTERNET_STATE_CONNECTED                0x00000001  // connected state (mutually exclusive with disconnected)
  1168. #define INTERNET_STATE_DISCONNECTED             0x00000002  // disconnected from network
  1169. #define INTERNET_STATE_DISCONNECTED_BY_USER     0x00000010  // disconnected by user request
  1170. #define INTERNET_STATE_IDLE                     0x00000100  // no network requests being made (by Wininet)
  1171. #define INTERNET_STATE_BUSY                     0x00000200  // network requests being made (by Wininet)
  1172.  
  1173.  
  1174. //
  1175. // if the following value is returned by InternetSetStatusCallback, then
  1176. // probably an invalid (non-code) address was supplied for the callback
  1177. //
  1178.  
  1179. #define INTERNET_INVALID_STATUS_CALLBACK        ((INTERNET_STATUS_CALLBACK)(-1L))
  1180.  
  1181. //
  1182. // FTP
  1183. //
  1184.  
  1185. //
  1186. // manifests
  1187. //
  1188.  
  1189. #define FTP_TRANSFER_TYPE_UNKNOWN   0x00000000
  1190. #define FTP_TRANSFER_TYPE_ASCII     0x00000001
  1191. #define FTP_TRANSFER_TYPE_BINARY    0x00000002
  1192.  
  1193. #define FTP_TRANSFER_TYPE_MASK      (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY)
  1194.  
  1195. //
  1196. // prototypes
  1197. //
  1198.  
  1199. INTERNETAPI
  1200. HINTERNET
  1201. WINAPI
  1202. FtpFindFirstFileA(
  1203.     IN HINTERNET hConnect,
  1204.     IN LPCSTR lpszSearchFile OPTIONAL,
  1205.     OUT LPWIN32_FIND_DATA lpFindFileData OPTIONAL,
  1206.     IN DWORD dwFlags,
  1207.     IN DWORD dwContext
  1208.     );
  1209. INTERNETAPI
  1210. HINTERNET
  1211. WINAPI
  1212. FtpFindFirstFileW(
  1213.     IN HINTERNET hConnect,
  1214.     IN LPCWSTR lpszSearchFile OPTIONAL,
  1215.     OUT LPWIN32_FIND_DATA lpFindFileData OPTIONAL,
  1216.     IN DWORD dwFlags,
  1217.     IN DWORD dwContext
  1218.     );
  1219. #ifdef UNICODE
  1220. #define FtpFindFirstFile  FtpFindFirstFileW
  1221. #else
  1222. #define FtpFindFirstFile  FtpFindFirstFileA
  1223. #endif // !UNICODE
  1224.  
  1225. BOOLAPI
  1226. FtpGetFileA(
  1227.     IN HINTERNET hConnect,
  1228.     IN LPCSTR lpszRemoteFile,
  1229.     IN LPCSTR lpszNewFile,
  1230.     IN BOOL fFailIfExists,
  1231.     IN DWORD dwFlagsAndAttributes,
  1232.     IN DWORD dwFlags,
  1233.     IN DWORD dwContext
  1234.     );
  1235. BOOLAPI
  1236. FtpGetFileW(
  1237.     IN HINTERNET hConnect,
  1238.     IN LPCWSTR lpszRemoteFile,
  1239.     IN LPCWSTR lpszNewFile,
  1240.     IN BOOL fFailIfExists,
  1241.     IN DWORD dwFlagsAndAttributes,
  1242.     IN DWORD dwFlags,
  1243.     IN DWORD dwContext
  1244.     );
  1245. #ifdef UNICODE
  1246. #define FtpGetFile  FtpGetFileW
  1247. #else
  1248. #define FtpGetFile  FtpGetFileA
  1249. #endif // !UNICODE
  1250.  
  1251. BOOLAPI
  1252. FtpPutFileA(
  1253.     IN HINTERNET hConnect,
  1254.     IN LPCSTR lpszLocalFile,
  1255.     IN LPCSTR lpszNewRemoteFile,
  1256.     IN DWORD dwFlags,
  1257.     IN DWORD dwContext
  1258.     );
  1259. BOOLAPI
  1260. FtpPutFileW(
  1261.     IN HINTERNET hConnect,
  1262.     IN LPCWSTR lpszLocalFile,
  1263.     IN LPCWSTR lpszNewRemoteFile,
  1264.     IN DWORD dwFlags,
  1265.     IN DWORD dwContext
  1266.     );
  1267. #ifdef UNICODE
  1268. #define FtpPutFile  FtpPutFileW
  1269. #else
  1270. #define FtpPutFile  FtpPutFileA
  1271. #endif // !UNICODE
  1272.  
  1273. BOOLAPI
  1274. FtpDeleteFileA(
  1275.     IN HINTERNET hConnect,
  1276.     IN LPCSTR lpszFileName
  1277.     );
  1278. BOOLAPI
  1279. FtpDeleteFileW(
  1280.     IN HINTERNET hConnect,
  1281.     IN LPCWSTR lpszFileName
  1282.     );
  1283. #ifdef UNICODE
  1284. #define FtpDeleteFile  FtpDeleteFileW
  1285. #else
  1286. #define FtpDeleteFile  FtpDeleteFileA
  1287. #endif // !UNICODE
  1288.  
  1289. BOOLAPI
  1290. FtpRenameFileA(
  1291.     IN HINTERNET hConnect,
  1292.     IN LPCSTR lpszExisting,
  1293.     IN LPCSTR lpszNew
  1294.     );
  1295. BOOLAPI
  1296. FtpRenameFileW(
  1297.     IN HINTERNET hConnect,
  1298.     IN LPCWSTR lpszExisting,
  1299.     IN LPCWSTR lpszNew
  1300.     );
  1301. #ifdef UNICODE
  1302. #define FtpRenameFile  FtpRenameFileW
  1303. #else
  1304. #define FtpRenameFile  FtpRenameFileA
  1305. #endif // !UNICODE
  1306.  
  1307. INTERNETAPI
  1308. HINTERNET
  1309. WINAPI
  1310. FtpOpenFileA(
  1311.     IN HINTERNET hConnect,
  1312.     IN LPCSTR lpszFileName,
  1313.     IN DWORD dwAccess,
  1314.     IN DWORD dwFlags,
  1315.     IN DWORD dwContext
  1316.     );
  1317. INTERNETAPI
  1318. HINTERNET
  1319. WINAPI
  1320. FtpOpenFileW(
  1321.     IN HINTERNET hConnect,
  1322.     IN LPCWSTR lpszFileName,
  1323.     IN DWORD dwAccess,
  1324.     IN DWORD dwFlags,
  1325.     IN DWORD dwContext
  1326.     );
  1327. #ifdef UNICODE
  1328. #define FtpOpenFile  FtpOpenFileW
  1329. #else
  1330. #define FtpOpenFile  FtpOpenFileA
  1331. #endif // !UNICODE
  1332.  
  1333. BOOLAPI
  1334. FtpCreateDirectoryA(
  1335.     IN HINTERNET hConnect,
  1336.     IN LPCSTR lpszDirectory
  1337.     );
  1338. BOOLAPI
  1339. FtpCreateDirectoryW(
  1340.     IN HINTERNET hConnect,
  1341.     IN LPCWSTR lpszDirectory
  1342.     );
  1343. #ifdef UNICODE
  1344. #define FtpCreateDirectory  FtpCreateDirectoryW
  1345. #else
  1346. #define FtpCreateDirectory  FtpCreateDirectoryA
  1347. #endif // !UNICODE
  1348.  
  1349. BOOLAPI
  1350. FtpRemoveDirectoryA(
  1351.     IN HINTERNET hConnect,
  1352.     IN LPCSTR lpszDirectory
  1353.     );
  1354. BOOLAPI
  1355. FtpRemoveDirectoryW(
  1356.     IN HINTERNET hConnect,
  1357.     IN LPCWSTR lpszDirectory
  1358.     );
  1359. #ifdef UNICODE
  1360. #define FtpRemoveDirectory  FtpRemoveDirectoryW
  1361. #else
  1362. #define FtpRemoveDirectory  FtpRemoveDirectoryA
  1363. #endif // !UNICODE
  1364.  
  1365. BOOLAPI
  1366. FtpSetCurrentDirectoryA(
  1367.     IN HINTERNET hConnect,
  1368.     IN LPCSTR lpszDirectory
  1369.     );
  1370. BOOLAPI
  1371. FtpSetCurrentDirectoryW(
  1372.     IN HINTERNET hConnect,
  1373.     IN LPCWSTR lpszDirectory
  1374.     );
  1375. #ifdef UNICODE
  1376. #define FtpSetCurrentDirectory  FtpSetCurrentDirectoryW
  1377. #else
  1378. #define FtpSetCurrentDirectory  FtpSetCurrentDirectoryA
  1379. #endif // !UNICODE
  1380.  
  1381. BOOLAPI
  1382. FtpGetCurrentDirectoryA(
  1383.     IN HINTERNET hConnect,
  1384.     OUT LPSTR lpszCurrentDirectory,
  1385.     IN OUT LPDWORD lpdwCurrentDirectory
  1386.     );
  1387. BOOLAPI
  1388. FtpGetCurrentDirectoryW(
  1389.     IN HINTERNET hConnect,
  1390.     OUT LPWSTR lpszCurrentDirectory,
  1391.     IN OUT LPDWORD lpdwCurrentDirectory
  1392.     );
  1393. #ifdef UNICODE
  1394. #define FtpGetCurrentDirectory  FtpGetCurrentDirectoryW
  1395. #else
  1396. #define FtpGetCurrentDirectory  FtpGetCurrentDirectoryA
  1397. #endif // !UNICODE
  1398.  
  1399.  
  1400. //
  1401. // Gopher
  1402. //
  1403.  
  1404. //
  1405. // manifests
  1406. //
  1407.  
  1408. //
  1409. // string field lengths (in characters, not bytes)
  1410. //
  1411.  
  1412. #define MAX_GOPHER_DISPLAY_TEXT     128
  1413. #define MAX_GOPHER_SELECTOR_TEXT    256
  1414. #define MAX_GOPHER_HOST_NAME        INTERNET_MAX_HOST_NAME_LENGTH
  1415. #define MAX_GOPHER_LOCATOR_LENGTH   (1                                  \
  1416.                                     + MAX_GOPHER_DISPLAY_TEXT           \
  1417.                                     + 1                                 \
  1418.                                     + MAX_GOPHER_SELECTOR_TEXT          \
  1419.                                     + 1                                 \
  1420.                                     + MAX_GOPHER_HOST_NAME              \
  1421.                                     + 1                                 \
  1422.                                     + INTERNET_MAX_PORT_NUMBER_LENGTH   \
  1423.                                     + 1                                 \
  1424.                                     + 1                                 \
  1425.                                     + 2                                 \
  1426.                                     )
  1427.  
  1428. //
  1429. // structures/types
  1430. //
  1431.  
  1432. //
  1433. // GOPHER_FIND_DATA - returns the results of a GopherFindFirstFile()/
  1434. // InternetFindNextFile() request
  1435. //
  1436.  
  1437. typedef struct {
  1438.     CHAR   DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
  1439.     DWORD GopherType;   // GOPHER_TYPE_, if known
  1440.     DWORD SizeLow;
  1441.     DWORD SizeHigh;
  1442.     FILETIME LastModificationTime;
  1443.     CHAR   Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
  1444. } GOPHER_FIND_DATAA, * LPGOPHER_FIND_DATAA;
  1445. typedef struct {
  1446.     WCHAR  DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
  1447.     DWORD GopherType;   // GOPHER_TYPE_, if known
  1448.     DWORD SizeLow;
  1449.     DWORD SizeHigh;
  1450.     FILETIME LastModificationTime;
  1451.     WCHAR  Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
  1452. } GOPHER_FIND_DATAW, * LPGOPHER_FIND_DATAW;
  1453. #ifdef UNICODE
  1454. typedef GOPHER_FIND_DATAW GOPHER_FIND_DATA;
  1455. typedef LPGOPHER_FIND_DATAW LPGOPHER_FIND_DATA;
  1456. #else
  1457. typedef GOPHER_FIND_DATAA GOPHER_FIND_DATA;
  1458. typedef LPGOPHER_FIND_DATAA LPGOPHER_FIND_DATA;
  1459. #endif // UNICODE
  1460.  
  1461. //
  1462. // manifests for GopherType
  1463. //
  1464.  
  1465. #define GOPHER_TYPE_TEXT_FILE       0x00000001
  1466. #define GOPHER_TYPE_DIRECTORY       0x00000002
  1467. #define GOPHER_TYPE_CSO             0x00000004
  1468. #define GOPHER_TYPE_ERROR           0x00000008
  1469. #define GOPHER_TYPE_MAC_BINHEX      0x00000010
  1470. #define GOPHER_TYPE_DOS_ARCHIVE     0x00000020
  1471. #define GOPHER_TYPE_UNIX_UUENCODED  0x00000040
  1472. #define GOPHER_TYPE_INDEX_SERVER    0x00000080
  1473. #define GOPHER_TYPE_TELNET          0x00000100
  1474. #define GOPHER_TYPE_BINARY          0x00000200
  1475. #define GOPHER_TYPE_REDUNDANT       0x00000400
  1476. #define GOPHER_TYPE_TN3270          0x00000800
  1477. #define GOPHER_TYPE_GIF             0x00001000
  1478. #define GOPHER_TYPE_IMAGE           0x00002000
  1479. #define GOPHER_TYPE_BITMAP          0x00004000
  1480. #define GOPHER_TYPE_MOVIE           0x00008000
  1481. #define GOPHER_TYPE_SOUND           0x00010000
  1482. #define GOPHER_TYPE_HTML            0x00020000
  1483. #define GOPHER_TYPE_PDF             0x00040000
  1484. #define GOPHER_TYPE_CALENDAR        0x00080000
  1485. #define GOPHER_TYPE_INLINE          0x00100000
  1486. #define GOPHER_TYPE_UNKNOWN         0x20000000
  1487. #define GOPHER_TYPE_ASK             0x40000000
  1488. #define GOPHER_TYPE_GOPHER_PLUS     0x80000000
  1489.  
  1490. //
  1491. // gopher type macros
  1492. //
  1493.  
  1494. #define IS_GOPHER_FILE(type)            (BOOL)(((type) & GOPHER_TYPE_FILE_MASK) ? TRUE : FALSE)
  1495. #define IS_GOPHER_DIRECTORY(type)       (BOOL)(((type) & GOPHER_TYPE_DIRECTORY) ? TRUE : FALSE)
  1496. #define IS_GOPHER_PHONE_SERVER(type)    (BOOL)(((type) & GOPHER_TYPE_CSO) ? TRUE : FALSE)
  1497. #define IS_GOPHER_ERROR(type)           (BOOL)(((type) & GOPHER_TYPE_ERROR) ? TRUE : FALSE)
  1498. #define IS_GOPHER_INDEX_SERVER(type)    (BOOL)(((type) & GOPHER_TYPE_INDEX_SERVER) ? TRUE : FALSE)
  1499. #define IS_GOPHER_TELNET_SESSION(type)  (BOOL)(((type) & GOPHER_TYPE_TELNET) ? TRUE : FALSE)
  1500. #define IS_GOPHER_BACKUP_SERVER(type)   (BOOL)(((type) & GOPHER_TYPE_REDUNDANT) ? TRUE : FALSE)
  1501. #define IS_GOPHER_TN3270_SESSION(type)  (BOOL)(((type) & GOPHER_TYPE_TN3270) ? TRUE : FALSE)
  1502. #define IS_GOPHER_ASK(type)             (BOOL)(((type) & GOPHER_TYPE_ASK) ? TRUE : FALSE)
  1503. #define IS_GOPHER_PLUS(type)            (BOOL)(((type) & GOPHER_TYPE_GOPHER_PLUS) ? TRUE : FALSE)
  1504.  
  1505. #define IS_GOPHER_TYPE_KNOWN(type)      (BOOL)(((type) & GOPHER_TYPE_UNKNOWN) ? FALSE : TRUE)
  1506.  
  1507. //
  1508. // GOPHER_TYPE_FILE_MASK - use this to determine if a locator identifies a
  1509. // (known) file type
  1510. //
  1511.  
  1512. #define GOPHER_TYPE_FILE_MASK       (GOPHER_TYPE_TEXT_FILE          \
  1513.                                     | GOPHER_TYPE_MAC_BINHEX        \
  1514.                                     | GOPHER_TYPE_DOS_ARCHIVE       \
  1515.                                     | GOPHER_TYPE_UNIX_UUENCODED    \
  1516.                                     | GOPHER_TYPE_BINARY            \
  1517.                                     | GOPHER_TYPE_GIF               \
  1518.                                     | GOPHER_TYPE_IMAGE             \
  1519.                                     | GOPHER_TYPE_BITMAP            \
  1520.                                     | GOPHER_TYPE_MOVIE             \
  1521.                                     | GOPHER_TYPE_SOUND             \
  1522.                                     | GOPHER_TYPE_HTML              \
  1523.                                     | GOPHER_TYPE_PDF               \
  1524.                                     | GOPHER_TYPE_CALENDAR          \
  1525.                                     | GOPHER_TYPE_INLINE            \
  1526.                                     )
  1527.  
  1528. //
  1529. // structured gopher attributes (as defined in gopher+ protocol document)
  1530. //
  1531.  
  1532. typedef struct {
  1533.     LPCTSTR Comment;
  1534.     LPCTSTR EmailAddress;
  1535. } GOPHER_ADMIN_ATTRIBUTE_TYPE, * LPGOPHER_ADMIN_ATTRIBUTE_TYPE;
  1536.  
  1537. typedef struct {
  1538.     FILETIME DateAndTime;
  1539. } GOPHER_MOD_DATE_ATTRIBUTE_TYPE, * LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE;
  1540.  
  1541. typedef struct {
  1542.     DWORD Ttl;
  1543. } GOPHER_TTL_ATTRIBUTE_TYPE, * LPGOPHER_TTL_ATTRIBUTE_TYPE;
  1544.  
  1545. typedef struct {
  1546.     INT Score;
  1547. } GOPHER_SCORE_ATTRIBUTE_TYPE, * LPGOPHER_SCORE_ATTRIBUTE_TYPE;
  1548.  
  1549. typedef struct {
  1550.     INT LowerBound;
  1551.     INT UpperBound;
  1552. } GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, * LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
  1553.  
  1554. typedef struct {
  1555.     LPCTSTR Site;
  1556. } GOPHER_SITE_ATTRIBUTE_TYPE, * LPGOPHER_SITE_ATTRIBUTE_TYPE;
  1557.  
  1558. typedef struct {
  1559.     LPCTSTR Organization;
  1560. } GOPHER_ORGANIZATION_ATTRIBUTE_TYPE, * LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
  1561.  
  1562. typedef struct {
  1563.     LPCTSTR Location;
  1564. } GOPHER_LOCATION_ATTRIBUTE_TYPE, * LPGOPHER_LOCATION_ATTRIBUTE_TYPE;
  1565.  
  1566. typedef struct {
  1567.     INT DegreesNorth;
  1568.     INT MinutesNorth;
  1569.     INT SecondsNorth;
  1570.     INT DegreesEast;
  1571.     INT MinutesEast;
  1572.     INT SecondsEast;
  1573. } GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, * LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
  1574.  
  1575. typedef struct {
  1576.     INT Zone;
  1577. } GOPHER_TIMEZONE_ATTRIBUTE_TYPE, * LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE;
  1578.  
  1579. typedef struct {
  1580.     LPCTSTR Provider;
  1581. } GOPHER_PROVIDER_ATTRIBUTE_TYPE, * LPGOPHER_PROVIDER_ATTRIBUTE_TYPE;
  1582.  
  1583. typedef struct {
  1584.     LPCTSTR Version;
  1585. } GOPHER_VERSION_ATTRIBUTE_TYPE, * LPGOPHER_VERSION_ATTRIBUTE_TYPE;
  1586.  
  1587. typedef struct {
  1588.     LPCTSTR ShortAbstract;
  1589.     LPCTSTR AbstractFile;
  1590. } GOPHER_ABSTRACT_ATTRIBUTE_TYPE, * LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE;
  1591.  
  1592. typedef struct {
  1593.     LPCTSTR ContentType;
  1594.     LPCTSTR Language;
  1595.     DWORD Size;
  1596. } GOPHER_VIEW_ATTRIBUTE_TYPE, * LPGOPHER_VIEW_ATTRIBUTE_TYPE;
  1597.  
  1598. typedef struct {
  1599.     BOOL TreeWalk;
  1600. } GOPHER_VERONICA_ATTRIBUTE_TYPE, * LPGOPHER_VERONICA_ATTRIBUTE_TYPE;
  1601.  
  1602. typedef struct {
  1603.     LPCTSTR QuestionType;
  1604.     LPCTSTR QuestionText;
  1605. } GOPHER_ASK_ATTRIBUTE_TYPE, * LPGOPHER_ASK_ATTRIBUTE_TYPE;
  1606.  
  1607. //
  1608. // GOPHER_UNKNOWN_ATTRIBUTE_TYPE - this is returned if we retrieve an attribute
  1609. // that is not specified in the current gopher/gopher+ documentation. It is up
  1610. // to the application to parse the information
  1611. //
  1612.  
  1613. typedef struct {
  1614.     LPCTSTR Text;
  1615. } GOPHER_UNKNOWN_ATTRIBUTE_TYPE, * LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE;
  1616.  
  1617. //
  1618. // GOPHER_ATTRIBUTE_TYPE - returned in the user's buffer when an enumerated
  1619. // GopherGetAttribute call is made
  1620. //
  1621.  
  1622. typedef struct {
  1623.     DWORD CategoryId;   // e.g. GOPHER_CATEGORY_ID_ADMIN
  1624.     DWORD AttributeId;  // e.g. GOPHER_ATTRIBUTE_ID_ADMIN
  1625.     union {
  1626.         GOPHER_ADMIN_ATTRIBUTE_TYPE Admin;
  1627.         GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;
  1628.         GOPHER_TTL_ATTRIBUTE_TYPE Ttl;
  1629.         GOPHER_SCORE_ATTRIBUTE_TYPE Score;
  1630.         GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;
  1631.         GOPHER_SITE_ATTRIBUTE_TYPE Site;
  1632.         GOPHER_ORGANIZATION_ATTRIBUTE_TYPE Organization;
  1633.         GOPHER_LOCATION_ATTRIBUTE_TYPE Location;
  1634.         GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
  1635.         GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;
  1636.         GOPHER_PROVIDER_ATTRIBUTE_TYPE Provider;
  1637.         GOPHER_VERSION_ATTRIBUTE_TYPE Version;
  1638.         GOPHER_ABSTRACT_ATTRIBUTE_TYPE Abstract;
  1639.         GOPHER_VIEW_ATTRIBUTE_TYPE View;
  1640.         GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;
  1641.         GOPHER_ASK_ATTRIBUTE_TYPE Ask;
  1642.         GOPHER_UNKNOWN_ATTRIBUTE_TYPE Unknown;
  1643.     } AttributeType;
  1644. } GOPHER_ATTRIBUTE_TYPE, * LPGOPHER_ATTRIBUTE_TYPE;
  1645.  
  1646. #define MAX_GOPHER_CATEGORY_NAME    128     // arbitrary
  1647. #define MAX_GOPHER_ATTRIBUTE_NAME   128     //     "
  1648. #define MIN_GOPHER_ATTRIBUTE_LENGTH 256     //     "
  1649.  
  1650. //
  1651. // known gopher attribute categories. See below for ordinals
  1652. //
  1653.  
  1654. #define GOPHER_INFO_CATEGORY        TEXT("+INFO")
  1655. #define GOPHER_ADMIN_CATEGORY       TEXT("+ADMIN")
  1656. #define GOPHER_VIEWS_CATEGORY       TEXT("+VIEWS")
  1657. #define GOPHER_ABSTRACT_CATEGORY    TEXT("+ABSTRACT")
  1658. #define GOPHER_VERONICA_CATEGORY    TEXT("+VERONICA")
  1659.  
  1660. //
  1661. // known gopher attributes. These are the attribute names as defined in the
  1662. // gopher+ protocol document
  1663. //
  1664.  
  1665. #define GOPHER_ADMIN_ATTRIBUTE      TEXT("Admin")
  1666. #define GOPHER_MOD_DATE_ATTRIBUTE   TEXT("Mod-Date")
  1667. #define GOPHER_TTL_ATTRIBUTE        TEXT("TTL")
  1668. #define GOPHER_SCORE_ATTRIBUTE      TEXT("Score")
  1669. #define GOPHER_RANGE_ATTRIBUTE      TEXT("Score-range")
  1670. #define GOPHER_SITE_ATTRIBUTE       TEXT("Site")
  1671. #define GOPHER_ORG_ATTRIBUTE        TEXT("Org")
  1672. #define GOPHER_LOCATION_ATTRIBUTE   TEXT("Loc")
  1673. #define GOPHER_GEOG_ATTRIBUTE       TEXT("Geog")
  1674. #define GOPHER_TIMEZONE_ATTRIBUTE   TEXT("TZ")
  1675. #define GOPHER_PROVIDER_ATTRIBUTE   TEXT("Provider")
  1676. #define GOPHER_VERSION_ATTRIBUTE    TEXT("Version")
  1677. #define GOPHER_ABSTRACT_ATTRIBUTE   TEXT("Abstract")
  1678. #define GOPHER_VIEW_ATTRIBUTE       TEXT("View")
  1679. #define GOPHER_TREEWALK_ATTRIBUTE   TEXT("treewalk")
  1680.  
  1681. //
  1682. // identifiers for attribute strings
  1683. //
  1684.  
  1685. #define GOPHER_ATTRIBUTE_ID_BASE        0xabcccc00
  1686.  
  1687. #define GOPHER_CATEGORY_ID_ALL          (GOPHER_ATTRIBUTE_ID_BASE + 1)
  1688.  
  1689. #define GOPHER_CATEGORY_ID_INFO         (GOPHER_ATTRIBUTE_ID_BASE + 2)
  1690. #define GOPHER_CATEGORY_ID_ADMIN        (GOPHER_ATTRIBUTE_ID_BASE + 3)
  1691. #define GOPHER_CATEGORY_ID_VIEWS        (GOPHER_ATTRIBUTE_ID_BASE + 4)
  1692. #define GOPHER_CATEGORY_ID_ABSTRACT     (GOPHER_ATTRIBUTE_ID_BASE + 5)
  1693. #define GOPHER_CATEGORY_ID_VERONICA     (GOPHER_ATTRIBUTE_ID_BASE + 6)
  1694. #define GOPHER_CATEGORY_ID_ASK          (GOPHER_ATTRIBUTE_ID_BASE + 7)
  1695.  
  1696. #define GOPHER_CATEGORY_ID_UNKNOWN      (GOPHER_ATTRIBUTE_ID_BASE + 8)
  1697.  
  1698. #define GOPHER_ATTRIBUTE_ID_ALL         (GOPHER_ATTRIBUTE_ID_BASE + 9)
  1699.  
  1700. #define GOPHER_ATTRIBUTE_ID_ADMIN       (GOPHER_ATTRIBUTE_ID_BASE + 10)
  1701. #define GOPHER_ATTRIBUTE_ID_MOD_DATE    (GOPHER_ATTRIBUTE_ID_BASE + 11)
  1702. #define GOPHER_ATTRIBUTE_ID_TTL         (GOPHER_ATTRIBUTE_ID_BASE + 12)
  1703. #define GOPHER_ATTRIBUTE_ID_SCORE       (GOPHER_ATTRIBUTE_ID_BASE + 13)
  1704. #define GOPHER_ATTRIBUTE_ID_RANGE       (GOPHER_ATTRIBUTE_ID_BASE + 14)
  1705. #define GOPHER_ATTRIBUTE_ID_SITE        (GOPHER_ATTRIBUTE_ID_BASE + 15)
  1706. #define GOPHER_ATTRIBUTE_ID_ORG         (GOPHER_ATTRIBUTE_ID_BASE + 16)
  1707. #define GOPHER_ATTRIBUTE_ID_LOCATION    (GOPHER_ATTRIBUTE_ID_BASE + 17)
  1708. #define GOPHER_ATTRIBUTE_ID_GEOG        (GOPHER_ATTRIBUTE_ID_BASE + 18)
  1709. #define GOPHER_ATTRIBUTE_ID_TIMEZONE    (GOPHER_ATTRIBUTE_ID_BASE + 19)
  1710. #define GOPHER_ATTRIBUTE_ID_PROVIDER    (GOPHER_ATTRIBUTE_ID_BASE + 20)
  1711. #define GOPHER_ATTRIBUTE_ID_VERSION     (GOPHER_ATTRIBUTE_ID_BASE + 21)
  1712. #define GOPHER_ATTRIBUTE_ID_ABSTRACT    (GOPHER_ATTRIBUTE_ID_BASE + 22)
  1713. #define GOPHER_ATTRIBUTE_ID_VIEW        (GOPHER_ATTRIBUTE_ID_BASE + 23)
  1714. #define GOPHER_ATTRIBUTE_ID_TREEWALK    (GOPHER_ATTRIBUTE_ID_BASE + 24)
  1715.  
  1716. #define GOPHER_ATTRIBUTE_ID_UNKNOWN     (GOPHER_ATTRIBUTE_ID_BASE + 25)
  1717.  
  1718. //
  1719. // prototypes
  1720. //
  1721.  
  1722. BOOLAPI
  1723. GopherCreateLocatorA(
  1724.     IN LPCSTR lpszHost,
  1725.     IN INTERNET_PORT nServerPort,
  1726.     IN LPCSTR lpszDisplayString OPTIONAL,
  1727.     IN LPCSTR lpszSelectorString OPTIONAL,
  1728.     IN DWORD dwGopherType,
  1729.     OUT LPSTR lpszLocator OPTIONAL,
  1730.     IN OUT LPDWORD lpdwBufferLength
  1731.     );
  1732. BOOLAPI
  1733. GopherCreateLocatorW(
  1734.     IN LPCWSTR lpszHost,
  1735.     IN INTERNET_PORT nServerPort,
  1736.     IN LPCWSTR lpszDisplayString OPTIONAL,
  1737.     IN LPCWSTR lpszSelectorString OPTIONAL,
  1738.     IN DWORD dwGopherType,
  1739.     OUT LPWSTR lpszLocator OPTIONAL,
  1740.     IN OUT LPDWORD lpdwBufferLength
  1741.     );
  1742. #ifdef UNICODE
  1743. #define GopherCreateLocator  GopherCreateLocatorW
  1744. #else
  1745. #define GopherCreateLocator  GopherCreateLocatorA
  1746. #endif // !UNICODE
  1747.  
  1748. BOOLAPI
  1749. GopherGetLocatorTypeA(
  1750.     IN LPCSTR lpszLocator,
  1751.     OUT LPDWORD lpdwGopherType
  1752.     );
  1753. BOOLAPI
  1754. GopherGetLocatorTypeW(
  1755.     IN LPCWSTR lpszLocator,
  1756.     OUT LPDWORD lpdwGopherType
  1757.     );
  1758. #ifdef UNICODE
  1759. #define GopherGetLocatorType  GopherGetLocatorTypeW
  1760. #else
  1761. #define GopherGetLocatorType  GopherGetLocatorTypeA
  1762. #endif // !UNICODE
  1763.  
  1764. INTERNETAPI
  1765. HINTERNET
  1766. WINAPI
  1767. GopherFindFirstFileA(
  1768.     IN HINTERNET hConnect,
  1769.     IN LPCSTR lpszLocator OPTIONAL,
  1770.     IN LPCSTR lpszSearchString OPTIONAL,
  1771.     OUT LPGOPHER_FIND_DATAA lpFindData OPTIONAL,
  1772.     IN DWORD dwFlags,
  1773.     IN DWORD dwContext
  1774.     );
  1775. INTERNETAPI
  1776. HINTERNET
  1777. WINAPI
  1778. GopherFindFirstFileW(
  1779.     IN HINTERNET hConnect,
  1780.     IN LPCWSTR lpszLocator OPTIONAL,
  1781.     IN LPCWSTR lpszSearchString OPTIONAL,
  1782.     OUT LPGOPHER_FIND_DATAW lpFindData OPTIONAL,
  1783.     IN DWORD dwFlags,
  1784.     IN DWORD dwContext
  1785.     );
  1786. #ifdef UNICODE
  1787. #define GopherFindFirstFile  GopherFindFirstFileW
  1788. #else
  1789. #define GopherFindFirstFile  GopherFindFirstFileA
  1790. #endif // !UNICODE
  1791.  
  1792. INTERNETAPI
  1793. HINTERNET
  1794. WINAPI
  1795. GopherOpenFileA(
  1796.     IN HINTERNET hConnect,
  1797.     IN LPCSTR lpszLocator,
  1798.     IN LPCSTR lpszView OPTIONAL,
  1799.     IN DWORD dwFlags,
  1800.     IN DWORD dwContext
  1801.     );
  1802. INTERNETAPI
  1803. HINTERNET
  1804. WINAPI
  1805. GopherOpenFileW(
  1806.     IN HINTERNET hConnect,
  1807.     IN LPCWSTR lpszLocator,
  1808.     IN LPCWSTR lpszView OPTIONAL,
  1809.     IN DWORD dwFlags,
  1810.     IN DWORD dwContext
  1811.     );
  1812. #ifdef UNICODE
  1813. #define GopherOpenFile  GopherOpenFileW
  1814. #else
  1815. #define GopherOpenFile  GopherOpenFileA
  1816. #endif // !UNICODE
  1817.  
  1818. typedef
  1819. BOOL
  1820. (CALLBACK * GOPHER_ATTRIBUTE_ENUMERATOR)(
  1821.     LPGOPHER_ATTRIBUTE_TYPE lpAttributeInfo,
  1822.     DWORD dwError
  1823.     );
  1824.  
  1825. BOOLAPI
  1826. GopherGetAttributeA(
  1827.     IN HINTERNET hConnect,
  1828.     IN LPCSTR lpszLocator,
  1829.     IN LPCSTR lpszAttributeName OPTIONAL,
  1830.     OUT LPBYTE lpBuffer,
  1831.     IN DWORD dwBufferLength,
  1832.     OUT LPDWORD lpdwCharactersReturned,
  1833.     IN GOPHER_ATTRIBUTE_ENUMERATOR lpfnEnumerator OPTIONAL,
  1834.     IN DWORD dwContext
  1835.     );
  1836. BOOLAPI
  1837. GopherGetAttributeW(
  1838.     IN HINTERNET hConnect,
  1839.     IN LPCWSTR lpszLocator,
  1840.     IN LPCWSTR lpszAttributeName OPTIONAL,
  1841.     OUT LPBYTE lpBuffer,
  1842.     IN DWORD dwBufferLength,
  1843.     OUT LPDWORD lpdwCharactersReturned,
  1844.     IN GOPHER_ATTRIBUTE_ENUMERATOR lpfnEnumerator OPTIONAL,
  1845.     IN DWORD dwContext
  1846.     );
  1847. #ifdef UNICODE
  1848. #define GopherGetAttribute  GopherGetAttributeW
  1849. #else
  1850. #define GopherGetAttribute  GopherGetAttributeA
  1851. #endif // !UNICODE
  1852.  
  1853. //
  1854. // HTTP
  1855. //
  1856.  
  1857. //
  1858. // manifests
  1859. //
  1860.  
  1861. //
  1862. // the default major/minor HTTP version numbers
  1863. //
  1864.  
  1865. #define HTTP_MAJOR_VERSION      1
  1866. #define HTTP_MINOR_VERSION      0
  1867.  
  1868. #define HTTP_VERSION            TEXT("HTTP/1.0")
  1869.  
  1870. //
  1871. // HttpQueryInfo info levels. Generally, there is one info level
  1872. // for each potential RFC822/HTTP/MIME header that an HTTP server
  1873. // may send as part of a request response.
  1874. //
  1875. // The HTTP_QUERY_RAW_HEADERS info level is provided for clients
  1876. // that choose to perform their own header parsing.
  1877. //
  1878.  
  1879. #define HTTP_QUERY_MIME_VERSION                 0
  1880. #define HTTP_QUERY_CONTENT_TYPE                 1
  1881. #define HTTP_QUERY_CONTENT_TRANSFER_ENCODING    2
  1882. #define HTTP_QUERY_CONTENT_ID                   3
  1883. #define HTTP_QUERY_CONTENT_DESCRIPTION          4
  1884. #define HTTP_QUERY_CONTENT_LENGTH               5
  1885. #define HTTP_QUERY_CONTENT_LANGUAGE             6
  1886. #define HTTP_QUERY_ALLOW                        7
  1887. #define HTTP_QUERY_PUBLIC                       8
  1888. #define HTTP_QUERY_DATE                         9
  1889. #define HTTP_QUERY_EXPIRES                      10
  1890. #define HTTP_QUERY_LAST_MODIFIED                11
  1891. #define HTTP_QUERY_MESSAGE_ID                   12
  1892. #define HTTP_QUERY_URI                          13
  1893. #define HTTP_QUERY_DERIVED_FROM                 14
  1894. #define HTTP_QUERY_COST                         15
  1895. #define HTTP_QUERY_LINK                         16
  1896. #define HTTP_QUERY_PRAGMA                       17
  1897. #define HTTP_QUERY_VERSION                      18  // special: part of status line
  1898. #define HTTP_QUERY_STATUS_CODE                  19  // special: part of status line
  1899. #define HTTP_QUERY_STATUS_TEXT                  20  // special: part of status line
  1900. #define HTTP_QUERY_RAW_HEADERS                  21  // special: all headers as ASCIIZ
  1901. #define HTTP_QUERY_RAW_HEADERS_CRLF             22  // special: all headers
  1902. #define HTTP_QUERY_CONNECTION                   23
  1903. #define HTTP_QUERY_ACCEPT                       24
  1904. #define HTTP_QUERY_ACCEPT_CHARSET               25
  1905. #define HTTP_QUERY_ACCEPT_ENCODING              26
  1906. #define HTTP_QUERY_ACCEPT_LANGUAGE              27
  1907. #define HTTP_QUERY_AUTHORIZATION                28
  1908. #define HTTP_QUERY_CONTENT_ENCODING             29
  1909. #define HTTP_QUERY_FORWARDED                    30
  1910. #define HTTP_QUERY_FROM                         31
  1911. #define HTTP_QUERY_IF_MODIFIED_SINCE            32
  1912. #define HTTP_QUERY_LOCATION                     33
  1913. #define HTTP_QUERY_ORIG_URI                     34
  1914. #define HTTP_QUERY_REFERER                      35
  1915. #define HTTP_QUERY_RETRY_AFTER                  36
  1916. #define HTTP_QUERY_SERVER                       37
  1917. #define HTTP_QUERY_TITLE                        38
  1918. #define HTTP_QUERY_USER_AGENT                   39
  1919. #define HTTP_QUERY_WWW_AUTHENTICATE             40
  1920. #define HTTP_QUERY_PROXY_AUTHENTICATE           41
  1921. #define HTTP_QUERY_ACCEPT_RANGES                42
  1922. #define HTTP_QUERY_SET_COOKIE                   43
  1923. #define HTTP_QUERY_COOKIE                       44
  1924. #define HTTP_QUERY_REQUEST_METHOD               45  // special: GET/POST etc.
  1925. #define HTTP_QUERY_REFRESH                      46
  1926. #define HTTP_QUERY_CONTENT_DISPOSITION          47
  1927.  
  1928. //
  1929. // HTTP 1.1 defined headers
  1930. //
  1931.  
  1932. #define HTTP_QUERY_AGE                          48
  1933. #define HTTP_QUERY_CACHE_CONTROL                49
  1934. #define HTTP_QUERY_CONTENT_BASE                 50
  1935. #define HTTP_QUERY_CONTENT_LOCATION             51
  1936. #define HTTP_QUERY_CONTENT_MD5                  52
  1937. #define HTTP_QUERY_CONTENT_RANGE                53
  1938. #define HTTP_QUERY_ETAG                         54
  1939. #define HTTP_QUERY_HOST                         55
  1940. #define HTTP_QUERY_IF_MATCH                     56
  1941. #define HTTP_QUERY_IF_NONE_MATCH                57
  1942. #define HTTP_QUERY_IF_RANGE                     58
  1943. #define HTTP_QUERY_IF_UNMODIFIED_SINCE          59
  1944. #define HTTP_QUERY_MAX_FORWARDS                 60
  1945. #define HTTP_QUERY_PROXY_AUTHORIZATION          61
  1946. #define HTTP_QUERY_RANGE                        62
  1947. #define HTTP_QUERY_TRANSFER_ENCODING            63
  1948. #define HTTP_QUERY_UPGRADE                      64
  1949. #define HTTP_QUERY_VARY                         65
  1950. #define HTTP_QUERY_VIA                          66
  1951. #define HTTP_QUERY_WARNING                      67
  1952.  
  1953. #define HTTP_QUERY_MAX                          67
  1954.  
  1955. //
  1956. // HTTP_QUERY_CUSTOM - if this special value is supplied as the dwInfoLevel
  1957. // parameter of HttpQueryInfo() then the lpBuffer parameter contains the name
  1958. // of the header we are to query
  1959. //
  1960.  
  1961. #define HTTP_QUERY_CUSTOM                       65535
  1962.  
  1963. //
  1964. // HTTP_QUERY_FLAG_REQUEST_HEADERS - if this bit is set in the dwInfoLevel
  1965. // parameter of HttpQueryInfo() then the request headers will be queried for the
  1966. // request information
  1967. //
  1968.  
  1969. #define HTTP_QUERY_FLAG_REQUEST_HEADERS         0x80000000
  1970.  
  1971. //
  1972. // HTTP_QUERY_FLAG_SYSTEMTIME - if this bit is set in the dwInfoLevel parameter
  1973. // of HttpQueryInfo() AND the header being queried contains date information,
  1974. // e.g. the "Expires:" header then lpBuffer will contain a SYSTEMTIME structure
  1975. // containing the date and time information converted from the header string
  1976. //
  1977.  
  1978. #define HTTP_QUERY_FLAG_SYSTEMTIME              0x40000000
  1979.  
  1980. //
  1981. // HTTP_QUERY_FLAG_NUMBER - if this bit is set in the dwInfoLevel parameter of
  1982. // HttpQueryInfo(), then the value of the header will be converted to a number
  1983. // before being returned to the caller, if applicable
  1984. //
  1985.  
  1986. #define HTTP_QUERY_FLAG_NUMBER                  0x20000000
  1987.  
  1988. //
  1989. // HTTP_QUERY_FLAG_COALESCE - combine the values from several headers of the
  1990. // same name into the output buffer
  1991. //
  1992.  
  1993. #define HTTP_QUERY_FLAG_COALESCE                0x10000000
  1994.  
  1995.  
  1996. #define HTTP_QUERY_MODIFIER_FLAGS_MASK          (HTTP_QUERY_FLAG_REQUEST_HEADERS    \
  1997.                                                 | HTTP_QUERY_FLAG_SYSTEMTIME        \
  1998.                                                 | HTTP_QUERY_FLAG_NUMBER            \
  1999.                                                 | HTTP_QUERY_FLAG_COALESCE          \
  2000.                                                 )
  2001.  
  2002. #define HTTP_QUERY_HEADER_MASK                  (~HTTP_QUERY_MODIFIER_FLAGS_MASK)
  2003.  
  2004. //
  2005. // HTTP Response Status Codes:
  2006. //
  2007.  
  2008. #define HTTP_STATUS_CONTINUE            100 // OK to continue with request
  2009. #define HTTP_STATUS_SWITCH_PROTOCOLS    101 // server has switched protocols in upgrade header
  2010.  
  2011. #define HTTP_STATUS_OK                  200 // request completed
  2012. #define HTTP_STATUS_CREATED             201 // object created, reason = new URI
  2013. #define HTTP_STATUS_ACCEPTED            202 // async completion (TBS)
  2014. #define HTTP_STATUS_PARTIAL             203 // partial completion
  2015. #define HTTP_STATUS_NO_CONTENT          204 // no info to return
  2016. #define HTTP_STATUS_RESET_CONTENT       205 // request completed, but clear form
  2017. #define HTTP_STATUS_PARTIAL_CONTENT     206 // partial GET furfilled
  2018.  
  2019. #define HTTP_STATUS_AMBIGUOUS           300 // server couldn't decide what to return
  2020. #define HTTP_STATUS_MOVED               301 // object permanently moved
  2021. #define HTTP_STATUS_REDIRECT            302 // object temporarily moved
  2022. #define HTTP_STATUS_REDIRECT_METHOD     303 // redirection w/ new access method
  2023. #define HTTP_STATUS_NOT_MODIFIED        304 // if-modified-since was not modified
  2024. #define HTTP_STATUS_USE_PROXY           305 // redirection to proxy, location header specifies proxy to use
  2025. #define HTTP_STATUS_REDIRECT_KEEP_VERB  307 // HTTP/1.1: keep same verb
  2026.  
  2027. #define HTTP_STATUS_BAD_REQUEST         400 // invalid syntax
  2028. #define HTTP_STATUS_DENIED              401 // access denied
  2029. #define HTTP_STATUS_PAYMENT_REQ         402 // payment required
  2030. #define HTTP_STATUS_FORBIDDEN           403 // request forbidden
  2031. #define HTTP_STATUS_NOT_FOUND           404 // object not found
  2032. #define HTTP_STATUS_BAD_METHOD          405 // method is not allowed
  2033. #define HTTP_STATUS_NONE_ACCEPTABLE     406 // no response acceptable to client found
  2034. #define HTTP_STATUS_PROXY_AUTH_REQ      407 // proxy authentication required
  2035. #define HTTP_STATUS_REQUEST_TIMEOUT     408 // server timed out waiting for request
  2036. #define HTTP_STATUS_CONFLICT            409 // user should resubmit with more info
  2037. #define HTTP_STATUS_GONE                410 // the resource is no longer available
  2038. #define HTTP_STATUS_LENGTH_REQUIRED     411 // the server refused to accept request w/o a length
  2039. #define HTTP_STATUS_PRECOND_FAILED      412 // precondition given in request failed
  2040. #define HTTP_STATUS_REQUEST_TOO_LARGE   413 // request entity was too large
  2041. #define HTTP_STATUS_URI_TOO_LONG        414 // request URI too long
  2042. #define HTTP_STATUS_UNSUPPORTED_MEDIA   415 // unsupported media type
  2043.  
  2044. #define HTTP_STATUS_SERVER_ERROR        500 // internal server error
  2045. #define HTTP_STATUS_NOT_SUPPORTED       501 // required not supported
  2046. #define HTTP_STATUS_BAD_GATEWAY         502 // error response received from gateway
  2047. #define HTTP_STATUS_SERVICE_UNAVAIL     503 // temporarily overloaded
  2048. #define HTTP_STATUS_GATEWAY_TIMEOUT     504 // timed out waiting for gateway
  2049. #define HTTP_STATUS_VERSION_NOT_SUP     505 // HTTP version not supported
  2050.  
  2051. #define HTTP_STATUS_FIRST               HTTP_STATUS_CONTINUE
  2052. #define HTTP_STATUS_LAST                HTTP_STATUS_VERSION_NOT_SUP
  2053.  
  2054. //
  2055. // prototypes
  2056. //
  2057.  
  2058. INTERNETAPI
  2059. HINTERNET
  2060. WINAPI
  2061. HttpOpenRequestA(
  2062.     IN HINTERNET hConnect,
  2063.     IN LPCSTR lpszVerb,
  2064.     IN LPCSTR lpszObjectName,
  2065.     IN LPCSTR lpszVersion,
  2066.     IN LPCSTR lpszReferrer OPTIONAL,
  2067.     IN LPCSTR FAR * lplpszAcceptTypes OPTIONAL,
  2068.     IN DWORD dwFlags,
  2069.     IN DWORD dwContext
  2070.     );
  2071. INTERNETAPI
  2072. HINTERNET
  2073. WINAPI
  2074. HttpOpenRequestW(
  2075.     IN HINTERNET hConnect,
  2076.     IN LPCWSTR lpszVerb,
  2077.     IN LPCWSTR lpszObjectName,
  2078.     IN LPCWSTR lpszVersion,
  2079.     IN LPCWSTR lpszReferrer OPTIONAL,
  2080.     IN LPCWSTR FAR * lplpszAcceptTypes OPTIONAL,
  2081.     IN DWORD dwFlags,
  2082.     IN DWORD dwContext
  2083.     );
  2084. #ifdef UNICODE
  2085. #define HttpOpenRequest  HttpOpenRequestW
  2086. #else
  2087. #define HttpOpenRequest  HttpOpenRequestA
  2088. #endif // !UNICODE
  2089.  
  2090. BOOLAPI
  2091. HttpAddRequestHeadersA(
  2092.     IN HINTERNET hRequest,
  2093.     IN LPCSTR lpszHeaders,
  2094.     IN DWORD dwHeadersLength,
  2095.     IN DWORD dwModifiers
  2096.     );
  2097. BOOLAPI
  2098. HttpAddRequestHeadersW(
  2099.     IN HINTERNET hRequest,
  2100.     IN LPCWSTR lpszHeaders,
  2101.     IN DWORD dwHeadersLength,
  2102.     IN DWORD dwModifiers
  2103.     );
  2104. #ifdef UNICODE
  2105. #define HttpAddRequestHeaders  HttpAddRequestHeadersW
  2106. #else
  2107. #define HttpAddRequestHeaders  HttpAddRequestHeadersA
  2108. #endif // !UNICODE
  2109.  
  2110. //
  2111. // values for dwModifiers parameter of HttpAddRequestHeaders()
  2112. //
  2113.  
  2114. #define HTTP_ADDREQ_INDEX_MASK      0x0000FFFF
  2115. #define HTTP_ADDREQ_FLAGS_MASK      0xFFFF0000
  2116.  
  2117. //
  2118. // HTTP_ADDREQ_FLAG_ADD_IF_NEW - the header will only be added if it doesn't
  2119. // already exist
  2120. //
  2121.  
  2122. #define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000
  2123.  
  2124. //
  2125. // HTTP_ADDREQ_FLAG_ADD - if HTTP_ADDREQ_FLAG_REPLACE is set but the header is
  2126. // not found then if this flag is set, the header is added anyway, so long as
  2127. // there is a valid header-value
  2128. //
  2129.  
  2130. #define HTTP_ADDREQ_FLAG_ADD        0x20000000
  2131.  
  2132. //
  2133. // HTTP_ADDREQ_FLAG_COALESCE - coalesce headers with same name. e.g.
  2134. // "Accept: text/*" and "Accept: audio/*" with this flag results in a single
  2135. // header: "Accept: text/*, audio/*"
  2136. //
  2137.  
  2138. #define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA       0x40000000
  2139. #define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON   0x01000000
  2140. #define HTTP_ADDREQ_FLAG_COALESCE                  HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
  2141.  
  2142. //
  2143. // HTTP_ADDREQ_FLAG_REPLACE - replaces the specified header. Only one header can
  2144. // be supplied in the buffer. If the header to be replaced is not the first
  2145. // in a list of headers with the same name, then the relative index should be
  2146. // supplied in the low 8 bits of the dwModifiers parameter. If the header-value
  2147. // part is missing, then the header is removed
  2148. //
  2149.  
  2150. #define HTTP_ADDREQ_FLAG_REPLACE    0x80000000
  2151.  
  2152. BOOLAPI
  2153. HttpSendRequestA(
  2154.     IN HINTERNET hRequest,
  2155.     IN LPCSTR lpszHeaders OPTIONAL,
  2156.     IN DWORD dwHeadersLength,
  2157.     IN LPVOID lpOptional OPTIONAL,
  2158.     IN DWORD dwOptionalLength
  2159.     );
  2160. BOOLAPI
  2161. HttpSendRequestW(
  2162.     IN HINTERNET hRequest,
  2163.     IN LPCWSTR lpszHeaders OPTIONAL,
  2164.     IN DWORD dwHeadersLength,
  2165.     IN LPVOID lpOptional OPTIONAL,
  2166.     IN DWORD dwOptionalLength
  2167.     );
  2168. #ifdef UNICODE
  2169. #define HttpSendRequest  HttpSendRequestW
  2170. #else
  2171. #define HttpSendRequest  HttpSendRequestA
  2172. #endif // !UNICODE
  2173.  
  2174. INTERNETAPI
  2175. BOOL
  2176. WINAPI
  2177. HttpSendRequestExA(
  2178.     IN HINTERNET hRequest,
  2179.     IN LPINTERNET_BUFFERSA lpBuffersIn OPTIONAL,
  2180.     OUT LPINTERNET_BUFFERSA lpBuffersOut OPTIONAL,
  2181.     IN DWORD dwFlags,
  2182.     IN DWORD dwContext
  2183.     );
  2184. INTERNETAPI
  2185. BOOL
  2186. WINAPI
  2187. HttpSendRequestExW(
  2188.     IN HINTERNET hRequest,
  2189.     IN LPINTERNET_BUFFERSW lpBuffersIn OPTIONAL,
  2190.     OUT LPINTERNET_BUFFERSW lpBuffersOut OPTIONAL,
  2191.     IN DWORD dwFlags,
  2192.     IN DWORD dwContext
  2193.     );
  2194. #ifdef UNICODE
  2195. #define HttpSendRequestEx  HttpSendRequestExW
  2196. #else
  2197. #define HttpSendRequestEx  HttpSendRequestExA
  2198. #endif // !UNICODE
  2199.  
  2200. //
  2201. // flags for HttpSendRequestEx(), HttpEndRequest()
  2202. //
  2203.  
  2204. #define HSR_ASYNC       WININET_API_FLAG_ASYNC          // force async
  2205. #define HSR_SYNC        WININET_API_FLAG_SYNC           // force sync
  2206. #define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT    // use dwContext value
  2207. #define HSR_INITIATE    0x00000008                      // iterative operation (completed by HttpEndRequest)
  2208. #define HSR_DOWNLOAD    0x00000010                      // download to file
  2209. #define HSR_CHUNKED     0x00000020                      // operation is send of chunked data
  2210.  
  2211. INTERNETAPI
  2212. BOOL
  2213. WINAPI
  2214. HttpEndRequestA(
  2215.     IN HINTERNET hRequest,
  2216.     OUT LPINTERNET_BUFFERSA lpBuffersOut OPTIONAL,
  2217.     IN DWORD dwFlags,
  2218.     IN DWORD dwContext
  2219.     );
  2220. INTERNETAPI
  2221. BOOL
  2222. WINAPI
  2223. HttpEndRequestW(
  2224.     IN HINTERNET hRequest,
  2225.     OUT LPINTERNET_BUFFERSW lpBuffersOut OPTIONAL,
  2226.     IN DWORD dwFlags,
  2227.     IN DWORD dwContext
  2228.     );
  2229. #ifdef UNICODE
  2230. #define HttpEndRequest  HttpEndRequestW
  2231. #else
  2232. #define HttpEndRequest  HttpEndRequestA
  2233. #endif // !UNICODE
  2234.  
  2235. BOOLAPI
  2236. HttpQueryInfoA(
  2237.     IN HINTERNET hRequest,
  2238.     IN DWORD dwInfoLevel,
  2239.     IN OUT LPVOID lpBuffer OPTIONAL,
  2240.     IN OUT LPDWORD lpdwBufferLength,
  2241.     IN OUT LPDWORD lpdwIndex OPTIONAL
  2242.     );
  2243. BOOLAPI
  2244. HttpQueryInfoW(
  2245.     IN HINTERNET hRequest,
  2246.     IN DWORD dwInfoLevel,
  2247.     IN OUT LPVOID lpBuffer OPTIONAL,
  2248.     IN OUT LPDWORD lpdwBufferLength,
  2249.     IN OUT LPDWORD lpdwIndex OPTIONAL
  2250.     );
  2251. #ifdef UNICODE
  2252. #define HttpQueryInfo  HttpQueryInfoW
  2253. #else
  2254. #define HttpQueryInfo  HttpQueryInfoA
  2255. #endif // !UNICODE
  2256.  
  2257. //
  2258. // Cookie APIs
  2259. //
  2260.  
  2261.  
  2262. BOOLAPI
  2263. InternetSetCookieA(
  2264.     IN LPCSTR lpszUrl,
  2265.     IN LPCSTR lpszCookieName,
  2266.     IN LPCSTR lpszCookieData
  2267.     );
  2268. BOOLAPI
  2269. InternetSetCookieW(
  2270.     IN LPCSTR lpszUrl,
  2271.     IN LPCWSTR lpszCookieName,
  2272.     IN LPCWSTR lpszCookieData
  2273.     );
  2274. #ifdef UNICODE
  2275. #define InternetSetCookie  InternetSetCookieW
  2276. #else
  2277. #define InternetSetCookie  InternetSetCookieA
  2278. #endif // !UNICODE
  2279.  
  2280. BOOLAPI
  2281. InternetGetCookieA(
  2282.     IN LPCSTR lpszUrl,
  2283.     IN LPCSTR lpszCookieName,
  2284.     OUT LPSTR lpCookieData,
  2285.     IN OUT LPDWORD lpdwSize
  2286.     );
  2287. BOOLAPI
  2288. InternetGetCookieW(
  2289.     IN LPCSTR lpszUrl,
  2290.     IN LPCWSTR lpszCookieName,
  2291.     OUT LPWSTR lpCookieData,
  2292.     IN OUT LPDWORD lpdwSize
  2293.     );
  2294. #ifdef UNICODE
  2295. #define InternetGetCookie  InternetGetCookieW
  2296. #else
  2297. #define InternetGetCookie  InternetGetCookieA
  2298. #endif // !UNICODE
  2299.  
  2300.  
  2301. //
  2302. // offline browsing
  2303. //
  2304.  
  2305. INTERNETAPI
  2306. DWORD
  2307. WINAPI
  2308. InternetAttemptConnect(
  2309.     IN DWORD dwReserved
  2310.     );
  2311.  
  2312. BOOLAPI
  2313. InternetCheckConnectionA(
  2314.     IN LPCSTR lpszUrl,
  2315.     IN DWORD dwFlags,
  2316.     IN DWORD dwReserved
  2317.     );
  2318. BOOLAPI
  2319. InternetCheckConnectionW(
  2320.     IN LPCWSTR lpszUrl,
  2321.     IN DWORD dwFlags,
  2322.     IN DWORD dwReserved
  2323.     );
  2324. #ifdef UNICODE
  2325. #define InternetCheckConnection  InternetCheckConnectionW
  2326. #else
  2327. #define InternetCheckConnection  InternetCheckConnectionA
  2328. #endif // !UNICODE
  2329.  
  2330. #define FLAG_ICC_FORCE_CONNECTION       0x00000001
  2331.  
  2332. //
  2333. // Internet UI
  2334. //
  2335.  
  2336. //
  2337. // InternetErrorDlg - Provides UI for certain Errors.
  2338. //
  2339.  
  2340. #define FLAGS_ERROR_UI_FILTER_FOR_ERRORS        0x01
  2341. #define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS     0x02
  2342. #define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA      0x04
  2343. #define FLAGS_ERROR_UI_FLAGS_NO_UI              0x08
  2344. #define FLAGS_ERROR_UI_SERIALIZE_DIALOGS        0x10
  2345.  
  2346. //
  2347. // If SERIALIZE_DIALOGS flag set, client should implement thread-safe non-blocking callback...
  2348. //
  2349.  
  2350. DWORD InternetAuthNotifyCallback
  2351. (
  2352.     DWORD           dwContext,    // as passed to InternetErrorDlg
  2353.     DWORD           dwReturn,     // error code: success, resend, or cancel
  2354.     LPVOID          lpReserved    // reserved: will be set to null
  2355. );
  2356. typedef DWORD (CALLBACK * PFN_AUTH_NOTIFY) (DWORD, DWORD, LPVOID);
  2357.  
  2358. //
  2359. // ... and last parameter of InternetErrorDlg should point to...
  2360. //
  2361.  
  2362. typedef struct
  2363. {
  2364.     DWORD            cbStruct;    // size of this structure
  2365.     DWORD            dwOptions;   // reserved: must set to 0
  2366.     PFN_AUTH_NOTIFY  pfnNotify;   // notification callback to retry InternetErrorDlg
  2367.     DWORD            dwContext;   // context to pass to to notification function
  2368. }
  2369.     INTERNET_AUTH_NOTIFY_DATA;
  2370.  
  2371.  
  2372. INTERNETAPI
  2373. DWORD
  2374. WINAPI
  2375. InternetErrorDlg(
  2376.     IN HWND hWnd,
  2377.     IN OUT HINTERNET hRequest,
  2378.     IN DWORD dwError,
  2379.     IN DWORD dwFlags,
  2380.     IN OUT LPVOID * lppvData
  2381.     );
  2382.  
  2383. INTERNETAPI
  2384. DWORD
  2385. WINAPI
  2386. InternetConfirmZoneCrossing(
  2387.     IN HWND hWnd,
  2388.     IN LPSTR szUrlPrev,
  2389.     IN LPSTR szUrlNew,
  2390.     IN BOOL bPost
  2391.     );
  2392.  
  2393.  
  2394. //#if !defined(_WINERROR_)
  2395.  
  2396. //
  2397. // Internet API error returns
  2398. //
  2399.  
  2400. #define INTERNET_ERROR_BASE                     12000
  2401.  
  2402. #define ERROR_INTERNET_OUT_OF_HANDLES           (INTERNET_ERROR_BASE + 1)
  2403. #define ERROR_INTERNET_TIMEOUT                  (INTERNET_ERROR_BASE + 2)
  2404. #define ERROR_INTERNET_EXTENDED_ERROR           (INTERNET_ERROR_BASE + 3)
  2405. #define ERROR_INTERNET_INTERNAL_ERROR           (INTERNET_ERROR_BASE + 4)
  2406. #define ERROR_INTERNET_INVALID_URL              (INTERNET_ERROR_BASE + 5)
  2407. #define ERROR_INTERNET_UNRECOGNIZED_SCHEME      (INTERNET_ERROR_BASE + 6)
  2408. #define ERROR_INTERNET_NAME_NOT_RESOLVED        (INTERNET_ERROR_BASE + 7)
  2409. #define ERROR_INTERNET_PROTOCOL_NOT_FOUND       (INTERNET_ERROR_BASE + 8)
  2410. #define ERROR_INTERNET_INVALID_OPTION           (INTERNET_ERROR_BASE + 9)
  2411. #define ERROR_INTERNET_BAD_OPTION_LENGTH        (INTERNET_ERROR_BASE + 10)
  2412. #define ERROR_INTERNET_OPTION_NOT_SETTABLE      (INTERNET_ERROR_BASE + 11)
  2413. #define ERROR_INTERNET_SHUTDOWN                 (INTERNET_ERROR_BASE + 12)
  2414. #define ERROR_INTERNET_INCORRECT_USER_NAME      (INTERNET_ERROR_BASE + 13)
  2415. #define ERROR_INTERNET_INCORRECT_PASSWORD       (INTERNET_ERROR_BASE + 14)
  2416. #define ERROR_INTERNET_LOGIN_FAILURE            (INTERNET_ERROR_BASE + 15)
  2417. #define ERROR_INTERNET_INVALID_OPERATION        (INTERNET_ERROR_BASE + 16)
  2418. #define ERROR_INTERNET_OPERATION_CANCELLED      (INTERNET_ERROR_BASE + 17)
  2419. #define ERROR_INTERNET_INCORRECT_HANDLE_TYPE    (INTERNET_ERROR_BASE + 18)
  2420. #define ERROR_INTERNET_INCORRECT_HANDLE_STATE   (INTERNET_ERROR_BASE + 19)
  2421. #define ERROR_INTERNET_NOT_PROXY_REQUEST        (INTERNET_ERROR_BASE + 20)
  2422. #define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE + 21)
  2423. #define ERROR_INTERNET_BAD_REGISTRY_PARAMETER   (INTERNET_ERROR_BASE + 22)
  2424. #define ERROR_INTERNET_NO_DIRECT_ACCESS         (INTERNET_ERROR_BASE + 23)
  2425. #define ERROR_INTERNET_NO_CONTEXT               (INTERNET_ERROR_BASE + 24)
  2426. #define ERROR_INTERNET_NO_CALLBACK              (INTERNET_ERROR_BASE + 25)
  2427. #define ERROR_INTERNET_REQUEST_PENDING          (INTERNET_ERROR_BASE + 26)
  2428. #define ERROR_INTERNET_INCORRECT_FORMAT         (INTERNET_ERROR_BASE + 27)
  2429. #define ERROR_INTERNET_ITEM_NOT_FOUND           (INTERNET_ERROR_BASE + 28)
  2430. #define ERROR_INTERNET_CANNOT_CONNECT           (INTERNET_ERROR_BASE + 29)
  2431. #define ERROR_INTERNET_CONNECTION_ABORTED       (INTERNET_ERROR_BASE + 30)
  2432. #define ERROR_INTERNET_CONNECTION_RESET         (INTERNET_ERROR_BASE + 31)
  2433. #define ERROR_INTERNET_FORCE_RETRY              (INTERNET_ERROR_BASE + 32)
  2434. #define ERROR_INTERNET_INVALID_PROXY_REQUEST    (INTERNET_ERROR_BASE + 33)
  2435. #define ERROR_INTERNET_NEED_UI                  (INTERNET_ERROR_BASE + 34)
  2436.  
  2437. #define ERROR_INTERNET_HANDLE_EXISTS            (INTERNET_ERROR_BASE + 36)
  2438. #define ERROR_INTERNET_SEC_CERT_DATE_INVALID    (INTERNET_ERROR_BASE + 37)
  2439. #define ERROR_INTERNET_SEC_CERT_CN_INVALID      (INTERNET_ERROR_BASE + 38)
  2440. #define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR   (INTERNET_ERROR_BASE + 39)
  2441. #define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR   (INTERNET_ERROR_BASE + 40)
  2442. #define ERROR_INTERNET_MIXED_SECURITY           (INTERNET_ERROR_BASE + 41)
  2443. #define ERROR_INTERNET_CHG_POST_IS_NON_SECURE   (INTERNET_ERROR_BASE + 42)
  2444. #define ERROR_INTERNET_POST_IS_NON_SECURE       (INTERNET_ERROR_BASE + 43)
  2445. #define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED  (INTERNET_ERROR_BASE + 44)
  2446. #define ERROR_INTERNET_INVALID_CA               (INTERNET_ERROR_BASE + 45)
  2447. #define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP    (INTERNET_ERROR_BASE + 46)
  2448. #define ERROR_INTERNET_ASYNC_THREAD_FAILED      (INTERNET_ERROR_BASE + 47)
  2449. #define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE   (INTERNET_ERROR_BASE + 48)
  2450. #define ERROR_INTERNET_DIALOG_PENDING           (INTERNET_ERROR_BASE + 49)
  2451. #define ERROR_INTERNET_RETRY_DIALOG             (INTERNET_ERROR_BASE + 50)
  2452. #define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR  (INTERNET_ERROR_BASE + 52)
  2453. #define ERROR_INTERNET_INSERT_CDROM             (INTERNET_ERROR_BASE + 53)
  2454.  
  2455.  
  2456. //
  2457. // FTP API errors
  2458. //
  2459.  
  2460. #define ERROR_FTP_TRANSFER_IN_PROGRESS          (INTERNET_ERROR_BASE + 110)
  2461. #define ERROR_FTP_DROPPED                       (INTERNET_ERROR_BASE + 111)
  2462. #define ERROR_FTP_NO_PASSIVE_MODE               (INTERNET_ERROR_BASE + 112)
  2463.  
  2464. //
  2465. // gopher API errors
  2466. //
  2467.  
  2468. #define ERROR_GOPHER_PROTOCOL_ERROR             (INTERNET_ERROR_BASE + 130)
  2469. #define ERROR_GOPHER_NOT_FILE                   (INTERNET_ERROR_BASE + 131)
  2470. #define ERROR_GOPHER_DATA_ERROR                 (INTERNET_ERROR_BASE + 132)
  2471. #define ERROR_GOPHER_END_OF_DATA                (INTERNET_ERROR_BASE + 133)
  2472. #define ERROR_GOPHER_INVALID_LOCATOR            (INTERNET_ERROR_BASE + 134)
  2473. #define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE     (INTERNET_ERROR_BASE + 135)
  2474. #define ERROR_GOPHER_NOT_GOPHER_PLUS            (INTERNET_ERROR_BASE + 136)
  2475. #define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND        (INTERNET_ERROR_BASE + 137)
  2476. #define ERROR_GOPHER_UNKNOWN_LOCATOR            (INTERNET_ERROR_BASE + 138)
  2477.  
  2478. //
  2479. // HTTP API errors
  2480. //
  2481.  
  2482. #define ERROR_HTTP_HEADER_NOT_FOUND             (INTERNET_ERROR_BASE + 150)
  2483. #define ERROR_HTTP_DOWNLEVEL_SERVER             (INTERNET_ERROR_BASE + 151)
  2484. #define ERROR_HTTP_INVALID_SERVER_RESPONSE      (INTERNET_ERROR_BASE + 152)
  2485. #define ERROR_HTTP_INVALID_HEADER               (INTERNET_ERROR_BASE + 153)
  2486. #define ERROR_HTTP_INVALID_QUERY_REQUEST        (INTERNET_ERROR_BASE + 154)
  2487. #define ERROR_HTTP_HEADER_ALREADY_EXISTS        (INTERNET_ERROR_BASE + 155)
  2488. #define ERROR_HTTP_REDIRECT_FAILED              (INTERNET_ERROR_BASE + 156)
  2489. #define ERROR_HTTP_NOT_REDIRECTED               (INTERNET_ERROR_BASE + 160)
  2490. #define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION    (INTERNET_ERROR_BASE + 161)
  2491. #define ERROR_HTTP_COOKIE_DECLINED              (INTERNET_ERROR_BASE + 162)
  2492. #define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION  (INTERNET_ERROR_BASE + 168)
  2493.  
  2494. //
  2495. // additional Internet API error codes
  2496. //
  2497.  
  2498. #define ERROR_INTERNET_SECURITY_CHANNEL_ERROR   (INTERNET_ERROR_BASE + 157)
  2499. #define ERROR_INTERNET_UNABLE_TO_CACHE_FILE     (INTERNET_ERROR_BASE + 158)
  2500. #define ERROR_INTERNET_TCPIP_NOT_INSTALLED      (INTERNET_ERROR_BASE + 159)
  2501. #define ERROR_INTERNET_DISCONNECTED             (INTERNET_ERROR_BASE + 163)
  2502. #define ERROR_INTERNET_SERVER_UNREACHABLE       (INTERNET_ERROR_BASE + 164)
  2503. #define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 165)
  2504.  
  2505. #define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT    (INTERNET_ERROR_BASE + 166)
  2506. #define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT (INTERNET_ERROR_BASE + 167)
  2507. #define ERROR_INTERNET_SEC_INVALID_CERT    (INTERNET_ERROR_BASE + 169)
  2508. #define ERROR_INTERNET_SEC_CERT_REVOKED    (INTERNET_ERROR_BASE + 170)
  2509.  
  2510. // InternetAutodial specific errors
  2511.  
  2512. #define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK  (INTERNET_ERROR_BASE + 171)
  2513.  
  2514. #define INTERNET_ERROR_LAST                       ERROR_INTERNET_FAILED_DUETOSECURITYCHECK
  2515.  
  2516.  
  2517. //#endif // !defined(_WINERROR_)
  2518.  
  2519. //
  2520. // URLCACHE APIs
  2521. //
  2522.  
  2523. //
  2524. // datatype definitions.
  2525. //
  2526.  
  2527. //
  2528. // cache entry type flags.
  2529. //
  2530.  
  2531. #define NORMAL_CACHE_ENTRY              0x00000001
  2532. #define COOKIE_CACHE_ENTRY              0x00100000
  2533. #define URLHISTORY_CACHE_ENTRY          0x00200000
  2534. #define TRACK_OFFLINE_CACHE_ENTRY       0x00000010
  2535. #define TRACK_ONLINE_CACHE_ENTRY        0x00000020
  2536. #define STICKY_CACHE_ENTRY              0x00000004
  2537. #define SPARSE_CACHE_ENTRY              0x00010000
  2538.  
  2539.  
  2540.  
  2541. #define URLCACHE_FIND_DEFAULT_FILTER    NORMAL_CACHE_ENTRY             \
  2542.                                     |   COOKIE_CACHE_ENTRY             \
  2543.                                     |   URLHISTORY_CACHE_ENTRY         \
  2544.                                     |   TRACK_OFFLINE_CACHE_ENTRY      \
  2545.                                     |   TRACK_ONLINE_CACHE_ENTRY       \
  2546.                                     |   STICKY_CACHE_ENTRY
  2547.  
  2548.  
  2549.  
  2550. //
  2551. // INTERNET_CACHE_ENTRY_INFO -
  2552. //
  2553.  
  2554.  
  2555. typedef struct _INTERNET_CACHE_ENTRY_INFOA {
  2556.     DWORD dwStructSize;         // version of cache system.
  2557.     LPSTR lpszSourceUrlName;    // embedded pointer to the URL name string.
  2558.     LPSTR   lpszLocalFileName;  // embedded pointer to the local file name.
  2559.     DWORD CacheEntryType;       // cache type bit mask.
  2560.     DWORD dwUseCount;           // current users count of the cache entry.
  2561.     DWORD dwHitRate;            // num of times the cache entry was retrieved.
  2562.     DWORD dwSizeLow;            // low DWORD of the file size.
  2563.     DWORD dwSizeHigh;           // high DWORD of the file size.
  2564.     FILETIME LastModifiedTime;  // last modified time of the file in GMT format.
  2565.     FILETIME ExpireTime;        // expire time of the file in GMT format
  2566.     FILETIME LastAccessTime;    // last accessed time in GMT format
  2567.     FILETIME LastSyncTime;      // last time the URL was synchronized
  2568.                                 // with the source
  2569.     LPBYTE lpHeaderInfo;        // embedded pointer to the header info.
  2570.     DWORD dwHeaderInfoSize;     // size of the above header.
  2571.     LPSTR   lpszFileExtension;  // File extension used to retrive the urldata as a file.
  2572.         union {                     // Exemption delta from last access time.
  2573.                 DWORD dwReserved;
  2574.                 DWORD dwExemptDelta;
  2575.     };                          // Exemption delta from last access
  2576. } INTERNET_CACHE_ENTRY_INFOA, * LPINTERNET_CACHE_ENTRY_INFOA;
  2577. typedef struct _INTERNET_CACHE_ENTRY_INFOW {
  2578.     DWORD dwStructSize;         // version of cache system.
  2579.     LPSTR lpszSourceUrlName;    // embedded pointer to the URL name string.
  2580.     LPWSTR  lpszLocalFileName;  // embedded pointer to the local file name.
  2581.     DWORD CacheEntryType;       // cache type bit mask.
  2582.     DWORD dwUseCount;           // current users count of the cache entry.
  2583.     DWORD dwHitRate;            // num of times the cache entry was retrieved.
  2584.     DWORD dwSizeLow;            // low DWORD of the file size.
  2585.     DWORD dwSizeHigh;           // high DWORD of the file size.
  2586.     FILETIME LastModifiedTime;  // last modified time of the file in GMT format.
  2587.     FILETIME ExpireTime;        // expire time of the file in GMT format
  2588.     FILETIME LastAccessTime;    // last accessed time in GMT format
  2589.     FILETIME LastSyncTime;      // last time the URL was synchronized
  2590.                                 // with the source
  2591.     LPBYTE lpHeaderInfo;        // embedded pointer to the header info.
  2592.     DWORD dwHeaderInfoSize;     // size of the above header.
  2593.     LPWSTR  lpszFileExtension;  // File extension used to retrive the urldata as a file.
  2594.         union {                     // Exemption delta from last access time.
  2595.                 DWORD dwReserved;
  2596.                 DWORD dwExemptDelta;
  2597.     };                          // Exemption delta from last access
  2598. } INTERNET_CACHE_ENTRY_INFOW, * LPINTERNET_CACHE_ENTRY_INFOW;
  2599. #ifdef UNICODE
  2600. typedef INTERNET_CACHE_ENTRY_INFOW INTERNET_CACHE_ENTRY_INFO;
  2601. typedef LPINTERNET_CACHE_ENTRY_INFOW LPINTERNET_CACHE_ENTRY_INFO;
  2602. #else
  2603. typedef INTERNET_CACHE_ENTRY_INFOA INTERNET_CACHE_ENTRY_INFO;
  2604. typedef LPINTERNET_CACHE_ENTRY_INFOA LPINTERNET_CACHE_ENTRY_INFO;
  2605. #endif // UNICODE
  2606.  
  2607.  
  2608. //
  2609. // Cache APIs
  2610. //
  2611.  
  2612. BOOLAPI
  2613. CreateUrlCacheEntryA(
  2614.     IN LPCSTR lpszUrlName,
  2615.     IN DWORD dwExpectedFileSize,
  2616.     IN LPCSTR lpszFileExtension,
  2617.     OUT LPSTR lpszFileName,
  2618.     IN DWORD dwReserved
  2619.     );
  2620. BOOLAPI
  2621. CreateUrlCacheEntryW(
  2622.     IN LPCSTR lpszUrlName,
  2623.     IN DWORD dwExpectedFileSize,
  2624.     IN LPCSTR lpszFileExtension,
  2625.     OUT LPWSTR lpszFileName,
  2626.     IN DWORD dwReserved
  2627.     );
  2628. #ifdef UNICODE
  2629. #define CreateUrlCacheEntry  CreateUrlCacheEntryW
  2630. #else
  2631. #define CreateUrlCacheEntry  CreateUrlCacheEntryA
  2632. #endif // !UNICODE
  2633.  
  2634. BOOLAPI
  2635. CommitUrlCacheEntryA(
  2636.     IN LPCSTR lpszUrlName,
  2637.     IN LPCSTR lpszLocalFileName,
  2638.     IN FILETIME ExpireTime,
  2639.     IN FILETIME LastModifiedTime,
  2640.     IN DWORD CacheEntryType,
  2641.     IN LPBYTE lpHeaderInfo,
  2642.     IN DWORD dwHeaderSize,
  2643.     IN LPCSTR lpszFileExtension,
  2644.     IN DWORD dwReserved
  2645.     );
  2646. BOOLAPI
  2647. CommitUrlCacheEntryW(
  2648.     IN LPCSTR lpszUrlName,
  2649.     IN LPCWSTR lpszLocalFileName,
  2650.     IN FILETIME ExpireTime,
  2651.     IN FILETIME LastModifiedTime,
  2652.     IN DWORD CacheEntryType,
  2653.     IN LPBYTE lpHeaderInfo,
  2654.     IN DWORD dwHeaderSize,
  2655.     IN LPCWSTR lpszFileExtension,
  2656.     IN DWORD dwReserved
  2657.     );
  2658. #ifdef UNICODE
  2659. #define CommitUrlCacheEntry  CommitUrlCacheEntryW
  2660. #else
  2661. #define CommitUrlCacheEntry  CommitUrlCacheEntryA
  2662. #endif // !UNICODE
  2663.  
  2664. BOOLAPI
  2665. RetrieveUrlCacheEntryFileA(
  2666.     IN LPCSTR  lpszUrlName,
  2667.     OUT LPINTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
  2668.     IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
  2669.     IN DWORD dwReserved
  2670.     );
  2671. BOOLAPI
  2672. RetrieveUrlCacheEntryFileW(
  2673.     IN LPCSTR  lpszUrlName,
  2674.     OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
  2675.     IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
  2676.     IN DWORD dwReserved
  2677.     );
  2678. #ifdef UNICODE
  2679. #define RetrieveUrlCacheEntryFile  RetrieveUrlCacheEntryFileW
  2680. #else
  2681. #define RetrieveUrlCacheEntryFile  RetrieveUrlCacheEntryFileA
  2682. #endif // !UNICODE
  2683.  
  2684. BOOLAPI
  2685. UnlockUrlCacheEntryFile(
  2686.     IN LPCSTR lpszUrlName,
  2687.     IN DWORD dwReserved
  2688.     );
  2689.  
  2690. INTERNETAPI
  2691. HANDLE
  2692. WINAPI
  2693. RetrieveUrlCacheEntryStreamA(
  2694.     IN LPCSTR  lpszUrlName,
  2695.     OUT LPINTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
  2696.     IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
  2697.     IN BOOL fRandomRead,
  2698.     IN DWORD dwReserved
  2699.     );
  2700. INTERNETAPI
  2701. HANDLE
  2702. WINAPI
  2703. RetrieveUrlCacheEntryStreamW(
  2704.     IN LPCSTR  lpszUrlName,
  2705.     OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
  2706.     IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
  2707.     IN BOOL fRandomRead,
  2708.     IN DWORD dwReserved
  2709.     );
  2710. #ifdef UNICODE
  2711. #define RetrieveUrlCacheEntryStream  RetrieveUrlCacheEntryStreamW
  2712. #else
  2713. #define RetrieveUrlCacheEntryStream  RetrieveUrlCacheEntryStreamA
  2714. #endif // !UNICODE
  2715.  
  2716. BOOLAPI
  2717. ReadUrlCacheEntryStream(
  2718.     IN HANDLE hUrlCacheStream,
  2719.     IN DWORD dwLocation,
  2720.     IN OUT LPVOID lpBuffer,
  2721.     IN OUT LPDWORD lpdwLen,
  2722.     IN DWORD Reserved
  2723.     );
  2724.  
  2725. BOOLAPI
  2726. UnlockUrlCacheEntryStream(
  2727.     IN HANDLE hUrlCacheStream,
  2728.     IN DWORD Reserved
  2729.     );
  2730.  
  2731.  
  2732. BOOLAPI
  2733. GetUrlCacheEntryInfoA(
  2734.     IN LPCSTR lpszUrlName,
  2735.     OUT LPINTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
  2736.     IN OUT LPDWORD lpdwCacheEntryInfoBufferSize
  2737.     );
  2738. BOOLAPI
  2739. GetUrlCacheEntryInfoW(
  2740.     IN LPCSTR lpszUrlName,
  2741.     OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
  2742.     IN OUT LPDWORD lpdwCacheEntryInfoBufferSize
  2743.     );
  2744. #ifdef UNICODE
  2745. #define GetUrlCacheEntryInfo  GetUrlCacheEntryInfoW
  2746. #else
  2747. #define GetUrlCacheEntryInfo  GetUrlCacheEntryInfoA
  2748. #endif // !UNICODE
  2749.  
  2750.  
  2751. BOOLAPI
  2752. GetUrlCacheEntryInfoExA(
  2753.     IN LPCSTR lpszUrl,
  2754.     OUT LPINTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
  2755.     IN OUT LPDWORD lpdwCacheEntryInfoBufSize,
  2756.     OUT LPSTR      lpszReserved,  // must pass null
  2757.     IN OUT LPDWORD lpdwReserved,  // must pass null
  2758.     LPVOID         lpReserved,    // must pass null
  2759.     DWORD          dwFlags        // reserved
  2760.     );
  2761. BOOLAPI
  2762. GetUrlCacheEntryInfoExW(
  2763.     IN LPCSTR lpszUrl,
  2764.     OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
  2765.     IN OUT LPDWORD lpdwCacheEntryInfoBufSize,
  2766.     OUT LPSTR      lpszReserved,  // must pass null
  2767.     IN OUT LPDWORD lpdwReserved,  // must pass null
  2768.     LPVOID         lpReserved,    // must pass null
  2769.     DWORD          dwFlags        // reserved
  2770.     );
  2771. #ifdef UNICODE
  2772. #define GetUrlCacheEntryInfoEx  GetUrlCacheEntryInfoExW
  2773. #else
  2774. #define GetUrlCacheEntryInfoEx  GetUrlCacheEntryInfoExA
  2775. #endif // !UNICODE
  2776.  
  2777. #define CACHE_ENTRY_ATTRIBUTE_FC    0x00000004
  2778. #define CACHE_ENTRY_HITRATE_FC      0x00000010
  2779. #define CACHE_ENTRY_MODTIME_FC      0x00000040
  2780. #define CACHE_ENTRY_EXPTIME_FC      0x00000080
  2781. #define CACHE_ENTRY_ACCTIME_FC      0x00000100
  2782. #define CACHE_ENTRY_SYNCTIME_FC     0x00000200
  2783. #define CACHE_ENTRY_HEADERINFO_FC   0x00000400
  2784. #define CACHE_ENTRY_EXEMPT_DELTA_FC 0x00000800
  2785.  
  2786.  
  2787. BOOLAPI
  2788. SetUrlCacheEntryInfoA(
  2789.     IN LPCSTR lpszUrlName,
  2790.     IN LPINTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
  2791.     IN DWORD dwFieldControl
  2792.     );
  2793. BOOLAPI
  2794. SetUrlCacheEntryInfoW(
  2795.     IN LPCSTR lpszUrlName,
  2796.     IN LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
  2797.     IN DWORD dwFieldControl
  2798.     );
  2799. #ifdef UNICODE
  2800. #define SetUrlCacheEntryInfo  SetUrlCacheEntryInfoW
  2801. #else
  2802. #define SetUrlCacheEntryInfo  SetUrlCacheEntryInfoA
  2803. #endif // !UNICODE
  2804.  
  2805. //
  2806. // Cache Group Functions
  2807. //
  2808.  
  2809. typedef LONGLONG GROUPID;
  2810.  
  2811. INTERNETAPI
  2812. GROUPID
  2813. WINAPI
  2814. CreateUrlCacheGroup(
  2815.     IN DWORD  dwFlags,
  2816.     IN LPVOID lpReserved  // must pass NULL
  2817.     );
  2818.  
  2819. BOOLAPI
  2820. DeleteUrlCacheGroup(
  2821.     IN  GROUPID GroupId,
  2822.     IN  DWORD   dwFlags,       // must pass 0
  2823.     IN  LPVOID  lpReserved     // must pass NULL
  2824.     );
  2825.  
  2826. // Flags for SetUrlCacheEntryGroup
  2827. #define INTERNET_CACHE_GROUP_ADD      0
  2828. #define INTERNET_CACHE_GROUP_REMOVE   1
  2829.  
  2830. BOOLAPI
  2831. SetUrlCacheEntryGroup(
  2832.     IN LPCSTR   lpszUrlName,
  2833.     IN DWORD    dwFlags,
  2834.     IN GROUPID  GroupId,
  2835.     IN LPBYTE   pbGroupAttributes, // must pass NULL
  2836.     IN DWORD    cbGroupAttributes, // must pass 0
  2837.     IN LPVOID   lpReserved         // must pass NULL
  2838.     );
  2839.  
  2840. INTERNETAPI
  2841. HANDLE
  2842. WINAPI
  2843. FindFirstUrlCacheEntryExA(
  2844.     IN     LPCSTR    lpszUrlSearchPattern,
  2845.     IN     DWORD     dwFlags,
  2846.     IN     DWORD     dwFilter,
  2847.     IN     GROUPID   GroupId,
  2848.     OUT    LPINTERNET_CACHE_ENTRY_INFOA lpFirstCacheEntryInfo,
  2849.     IN OUT LPDWORD   lpdwFirstCacheEntryInfoBufferSize,
  2850.     OUT    LPVOID    lpGroupAttributes,     // must pass NULL
  2851.     IN OUT LPDWORD   pcbGroupAttributes,    // must pass NULL
  2852.     IN     LPVOID    lpReserved             // must pass NULL
  2853.     );
  2854. INTERNETAPI
  2855. HANDLE
  2856. WINAPI
  2857. FindFirstUrlCacheEntryExW(
  2858.     IN     LPCSTR    lpszUrlSearchPattern,
  2859.     IN     DWORD     dwFlags,
  2860.     IN     DWORD     dwFilter,
  2861.     IN     GROUPID   GroupId,
  2862.     OUT    LPINTERNET_CACHE_ENTRY_INFOW lpFirstCacheEntryInfo,
  2863.     IN OUT LPDWORD   lpdwFirstCacheEntryInfoBufferSize,
  2864.     OUT    LPVOID    lpGroupAttributes,     // must pass NULL
  2865.     IN OUT LPDWORD   pcbGroupAttributes,    // must pass NULL
  2866.     IN     LPVOID    lpReserved             // must pass NULL
  2867.     );
  2868. #ifdef UNICODE
  2869. #define FindFirstUrlCacheEntryEx  FindFirstUrlCacheEntryExW
  2870. #else
  2871. #define FindFirstUrlCacheEntryEx  FindFirstUrlCacheEntryExA
  2872. #endif // !UNICODE
  2873.  
  2874. BOOLAPI
  2875. FindNextUrlCacheEntryExA(
  2876.     IN     HANDLE    hEnumHandle,
  2877.     OUT    LPINTERNET_CACHE_ENTRY_INFOA lpFirstCacheEntryInfo,
  2878.     IN OUT LPDWORD   lpdwFirstCacheEntryInfoBufferSize,
  2879.     OUT    LPVOID    lpGroupAttributes,     // must pass NULL
  2880.     IN OUT LPDWORD   pcbGroupAttributes,    // must pass NULL
  2881.     IN     LPVOID    lpReserved             // must pass NULL
  2882.     );
  2883. BOOLAPI
  2884. FindNextUrlCacheEntryExW(
  2885.     IN     HANDLE    hEnumHandle,
  2886.     OUT    LPINTERNET_CACHE_ENTRY_INFOW lpFirstCacheEntryInfo,
  2887.     IN OUT LPDWORD   lpdwFirstCacheEntryInfoBufferSize,
  2888.     OUT    LPVOID    lpGroupAttributes,     // must pass NULL
  2889.     IN OUT LPDWORD   pcbGroupAttributes,    // must pass NULL
  2890.     IN     LPVOID    lpReserved             // must pass NULL
  2891.     );
  2892. #ifdef UNICODE
  2893. #define FindNextUrlCacheEntryEx  FindNextUrlCacheEntryExW
  2894. #else
  2895. #define FindNextUrlCacheEntryEx  FindNextUrlCacheEntryExA
  2896. #endif // !UNICODE
  2897.  
  2898. INTERNETAPI
  2899. HANDLE
  2900. WINAPI
  2901. FindFirstUrlCacheEntryA(
  2902.     IN LPCSTR lpszUrlSearchPattern,
  2903.     OUT LPINTERNET_CACHE_ENTRY_INFOA lpFirstCacheEntryInfo,
  2904.     IN OUT LPDWORD lpdwFirstCacheEntryInfoBufferSize
  2905.     );
  2906. INTERNETAPI
  2907. HANDLE
  2908. WINAPI
  2909. FindFirstUrlCacheEntryW(
  2910.     IN LPCSTR lpszUrlSearchPattern,
  2911.     OUT LPINTERNET_CACHE_ENTRY_INFOW lpFirstCacheEntryInfo,
  2912.     IN OUT LPDWORD lpdwFirstCacheEntryInfoBufferSize
  2913.     );
  2914. #ifdef UNICODE
  2915. #define FindFirstUrlCacheEntry  FindFirstUrlCacheEntryW
  2916. #else
  2917. #define FindFirstUrlCacheEntry  FindFirstUrlCacheEntryA
  2918. #endif // !UNICODE
  2919.  
  2920. BOOLAPI
  2921. FindNextUrlCacheEntryA(
  2922.     IN HANDLE hEnumHandle,
  2923.     OUT LPINTERNET_CACHE_ENTRY_INFOA lpNextCacheEntryInfo,
  2924.     IN OUT LPDWORD lpdwNextCacheEntryInfoBufferSize
  2925.     );
  2926. BOOLAPI
  2927. FindNextUrlCacheEntryW(
  2928.     IN HANDLE hEnumHandle,
  2929.     OUT LPINTERNET_CACHE_ENTRY_INFOW lpNextCacheEntryInfo,
  2930.     IN OUT LPDWORD lpdwNextCacheEntryInfoBufferSize
  2931.     );
  2932. #ifdef UNICODE
  2933. #define FindNextUrlCacheEntry  FindNextUrlCacheEntryW
  2934. #else
  2935. #define FindNextUrlCacheEntry  FindNextUrlCacheEntryA
  2936. #endif // !UNICODE
  2937.  
  2938.  
  2939. BOOLAPI
  2940. FindCloseUrlCache(
  2941.     IN HANDLE hEnumHandle
  2942.     );
  2943.  
  2944. BOOLAPI
  2945. DeleteUrlCacheEntry(
  2946.     IN LPCSTR lpszUrlName
  2947.     );
  2948.  
  2949.  
  2950.  
  2951. //
  2952. // Autodial APIs
  2953. //
  2954.  
  2955. INTERNETAPI
  2956. DWORD
  2957. WINAPI
  2958. InternetDial(
  2959.     IN HWND     hwndParent,
  2960.     IN LPTSTR   lpszConnectoid,
  2961.     IN DWORD    dwFlags,
  2962.     OUT LPDWORD lpdwConnection,
  2963.     IN DWORD    dwReserved);
  2964.  
  2965. // Flags for InternetDial - must not conflict with InternetAutodial flags
  2966. //                          as they are valid here also.
  2967. #define INTERNET_DIAL_UNATTENDED       0x8000
  2968.  
  2969. INTERNETAPI
  2970. DWORD
  2971. WINAPI
  2972. InternetHangUp(
  2973.     IN DWORD    dwConnection,
  2974.     IN DWORD    dwReserved);
  2975.  
  2976. #define INTERENT_GOONLINE_REFRESH 0x00000001
  2977. #define INTERENT_GOONLINE_MASK 0x00000001
  2978. INTERNETAPI
  2979. BOOL
  2980. WINAPI
  2981. InternetGoOnline(
  2982.     IN LPTSTR   lpszURL,
  2983.     IN HWND     hwndParent,
  2984.     IN DWORD    dwFlags);
  2985.  
  2986. INTERNETAPI
  2987. BOOL
  2988. WINAPI
  2989. InternetAutodial(
  2990.     IN DWORD    dwFlags,
  2991.     IN DWORD    dwReserved);
  2992.  
  2993. // Flags for InternetAutodial
  2994. #define INTERNET_AUTODIAL_FORCE_ONLINE          1
  2995. #define INTERNET_AUTODIAL_FORCE_UNATTENDED      2
  2996. #define INTERNET_AUTODIAL_FAILIFSECURITYCHECK   4
  2997.  
  2998. #define INTERNET_AUTODIAL_FLAGS_MASK (INTERNET_AUTODIAL_FORCE_ONLINE | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK)
  2999. INTERNETAPI
  3000. BOOL
  3001. WINAPI
  3002. InternetAutodialHangup(
  3003.     IN DWORD    dwReserved);
  3004.  
  3005. INTERNETAPI
  3006. BOOL
  3007. WINAPI
  3008. InternetGetConnectedState(
  3009.     OUT LPDWORD  lpdwFlags,
  3010.     IN DWORD    dwReserved);
  3011.  
  3012. // Flags for InternetGetConnectedState
  3013. #define INTERNET_CONNECTION_MODEM           1
  3014. #define INTERNET_CONNECTION_LAN             2
  3015. #define INTERNET_CONNECTION_PROXY           4
  3016. #define INTERNET_CONNECTION_MODEM_BUSY      8
  3017.  
  3018. //
  3019. // Custom dial handler functions
  3020. //
  3021.  
  3022. // Custom dial handler prototype
  3023. typedef DWORD (CALLBACK * PFN_DIAL_HANDLER) (HWND, LPCSTR, DWORD, LPDWORD);
  3024.  
  3025. // Flags for custom dial handler
  3026. #define INTERNET_CUSTOMDIAL_CONNECT         0
  3027. #define INTERNET_CUSTOMDIAL_UNATTENDED      1
  3028. #define INTERNET_CUSTOMDIAL_DISCONNECT      2
  3029.  
  3030. // Custom dial handler supported functionality flags
  3031. #define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 1
  3032. #define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE   2
  3033. #define INTERNET_CUSTOMDIAL_CAN_HANGUP          4
  3034.  
  3035. INTERNETAPI
  3036. BOOL
  3037. WINAPI
  3038. InternetSetDialState(
  3039.     IN LPCTSTR  lpszConnectoid,
  3040.     IN DWORD    dwState,
  3041.     IN DWORD    dwReserved);
  3042.  
  3043. // States for InternetSetDialState
  3044. #define INTERNET_DIALSTATE_DISCONNECTED     1
  3045.  
  3046.  
  3047.  
  3048.  
  3049. #if defined(__cplusplus)
  3050. }
  3051. #endif
  3052.  
  3053.  
  3054. /*
  3055.  * Return packing to whatever it was before we
  3056.  * entered this file
  3057.  */
  3058. #pragma pack(pop)
  3059.  
  3060.  
  3061. #pragma option pop
  3062. #endif // !defined(_WININET_)
  3063.